重归技术区,散200分,顺便问个问题:两台机器已经通过TCP/IP连接好了,但拔掉网线,如何检测到这个事件?

pcitman 2004-01-01 12:00:05
我测试了一下,拔掉网线后,一客户端的send函数不提示出错,能正确返回。
居然连断了网线都不知道,那么TCP/IP的面向连接的可靠性又体现在哪里?
...全文
227 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcitman 2004-01-02
  • 打赏
  • 举报
回复
回复人: sboom(+-LingCh-+) ( ) 信誉:85 2004-01-01 23:23:00 得分:0


TCP的连接可靠性的意思是你发送的包会被对方完整的收到,而不是说你的线段了也能发送,你的想法真不可思议。。。。
___________________________________
我不是要线断了还能发送,我只是想发送的时候如果线断了要知道这是发不出去了

sharkhuang 2004-01-02
  • 打赏
  • 举报
回复
非要上层判断!可以定时send 不成功连接就断开!
但是不能准确判断是网线断开!

所以你的物理判断必须物理硬件检查
sharkhuang 2004-01-02
  • 打赏
  • 举报
回复
tcp send如果成功那一定是个来回!
shenke410 2004-01-02
  • 打赏
  • 举报
回复
Ping……
呵呵,接分!
九重霄 2004-01-02
  • 打赏
  • 举报
回复
同意xiaohyy(醉大饿极)的观点。
taianmonkey 2004-01-02
  • 打赏
  • 举报
回复
返回的错误代码是:
10049
lcs1980 2004-01-02
  • 打赏
  • 举报
回复
开一个线程,并在这个线程中定时检测连接状况
victor_cui 2004-01-02
  • 打赏
  • 举报
回复
可以在应用中实现心跳包自己检测
101monster 2004-01-02
  • 打赏
  • 举报
回复
呵呵,恭喜恭喜!新年快乐!
VisualStudio 2004-01-02
  • 打赏
  • 举报
回复
转自驱动开发网
发信人: rain (夜猫子大王), 信区: SysInternals
标 题: Re: 请问实时发现网络down掉的原理?(转载)
发信站: 武汉白云黄鹤站 (2001年03月31日09:57:05 星期六), 转信

实时检测网线被拔掉是需要网卡设备驱动程序支持的,
如果驱动程序不支持是无法实现的,NDIS4要求设备驱动程序
最好提供CheckForHangHandler回调函数。2000会每隔2秒钟
调用此函数。驱动程序在此函数中检查网卡连线状态,
如果发生了改变,即拔去了网线或接上了网线,
驱动程序就会调用NdisMIndicateStatus通知所有的上层NDIS协议驱动程序.
其中: NDIS_STATUS_MEDIA_DISCONNECT 指示网线被拔掉,
NDIS_STATUS_MEDIA_CONNECT 指示网线被接上
NDIS_STATUS_LINK_SPEED_CHANGE 指示网卡速度改变,10/100自适应网卡才有。
网卡一般都有 status register 指示当然的连线状态,
也有网卡是通过获得 led status 来知道当前的连线状态的,
即绿灯亮表示连线,灭表示没有。
有些网卡拔掉或接上网线时会产生中断,在中断处理程序中一般也
检测网络连线状态并调用NdisMIndicateStatus,这样连线状态
在2000中就实时反应出来了,否则会在2秒钟内,即NDIS调用CheckForHangHandler后。

这个功能是微软在PC97规范中定义的,所以ndis3没有这个功能。
linux对这个没有要求,novell netware对这个有要求,其它的操作系统我也不清楚。
upuper 2004-01-02
  • 打赏
  • 举报
回复
up
ndy_w 2004-01-02
  • 打赏
  • 举报
回复
自己做ack。
可以判自己的网线,但不能判对方。
duyhui 2004-01-02
  • 打赏
  • 举报
回复
只能程序检查连接状态了
RomanticProgrammer 2004-01-01
  • 打赏
  • 举报
回复
我刚才试了一下,的确试这样的。好像tcp有个保活定时,只有超过这个时间后,send才失败!
private_guo 2004-01-01
  • 打赏
  • 举报
回复
我们的实现是要求双方一直做心跳测试,从而判断网络的状况,如果发现异常就记录下时刻,在规定时间内得到reset信息后从这个时刻开始恢复,否则,中断联系。
fzd999 2004-01-01
  • 打赏
  • 举报
回复
很容易阿

检测到关闭连接消息,同时还带着错误代码,就是非法断线了。
具体到各个模型,可以写个switch case语句来判断:)
yintongshun 2004-01-01
  • 打赏
  • 举报
回复
开个ping线程,不断检测,可以采取发送数据包的方式,只发送一个字符就可以
pcitman 2004-01-01
  • 打赏
  • 举报
回复
LINUX也有这问题的!
broadoceans 2004-01-01
  • 打赏
  • 举报
回复
我觉得不应该说是tcp/ip弱智,
而应该说其实现者没有实现好。
如果说弱智,说microsoft好了。
pcitman 2004-01-01
  • 打赏
  • 举报
回复
楼上的各位,我也一直以为TCP/IP不会弱智到这个地步,但事实确实如此,不是什么网卡驱动的问题。

情况是这样的:断开网线后,被断网线的机器检测到这个信息,但对方不知道,当网线重新连接上时,对方才检测到一个RESET信息!
查了半天的书,仍没有解决办法……
加载更多回复(7)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧