如何判断一个TCP连接的状态?

fengcaho 2005-12-27 11:33:02
TCP协议中,一个连接是由两个socket连接完成,怎么样根据socket判断当前TCP连接的状态呢?比如是已经连接,还是在CLOSE_WAIT状态等等。
...全文
863 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iGoo 2005-12-31
  • 打赏
  • 举报
回复
用 SIO_KEEPALIVE_VALS 选项可以设置异常断线发生的错误
但是在win2k下如果c s间 2-3分钟没有通讯,会产生一个错误的
网络关闭。谁知道这是为什么么?
fengcaho 2005-12-30
  • 打赏
  • 举报
回复
oyljerry(【勇敢的心】→ ㊣如果·爱√㊣) :能不能讲讲heartbeat包?
softrain 2005-12-29
  • 打赏
  • 举报
回复
链路异常时还需需要发检测包的.因为此时send和recv WSASend,WSARecv返回正常的.
周江涛 2005-12-29
  • 打赏
  • 举报
回复
你不需要检测连接状态的。
send和recv WSASend,WSARecv等等,每个winsock的函数都有返回。什么时候调用失败,那就是什么时候断开了。
nntg 2005-12-29
  • 打赏
  • 举报
回复
用多线程不行吗?单独用一个线程来复杂连接状态的维护、检测
ddddh 2005-12-29
  • 打赏
  • 举报
回复
一般来说,如果是对方或者路由器死机,通信线路损坏什么的,使用recv是没有办法知道连接已经断开了。因为这个时候对方没有机会给你发送FIN信号。所以对recv来说,和TCP连接仍然存在但是对方没有给你发送内容是一样的。

我觉得能够识别这种情况要么是不是的发送一些keep alive的消息,要么使用超时,即超过多长时间recv没有收到数据,就认为TCP连接已经断开了。
oyljerry 2005-12-29
  • 打赏
  • 举报
回复
异常中断通过heartbeat包来监测
oyljerry 2005-12-28
  • 打赏
  • 举报
回复
api执行后 有返回 ,可以根据返回值等来判断状态等
chensuwen 2005-12-28
  • 打赏
  • 举报
回复
关注...
fengcaho 2005-12-28
  • 打赏
  • 举报
回复
我的意思是能够及时相应网络已经断开的信息
程序没有进行数据通信的时候,我不能使用recv函数检测TCP连接的状态吧,要是那样的话,因为需要检测网络状态的程序是发送数据包的,要是搞一个recv在里面,感觉乱了
而等到send出错的时候,网络可能已经断开很长时间了
softrain 2005-12-28
  • 打赏
  • 举报
回复
楼主的通讯协议怎么会那么乱呢?搞不懂.
fengcaho 2005-12-28
  • 打赏
  • 举报
回复
recv不好吧?
本来数据包该别的函数接收过去的
函数的处理感觉就乱了
周江涛 2005-12-28
  • 打赏
  • 举报
回复
对方断线,你的recv函数会返回
返回0:对方正常关闭
返回1:对方异外掉线
fengcaho 2005-12-28
  • 打赏
  • 举报
回复
我想不执行API判断,有没有方法?因为API执行的时候,数据通信协议就乱了
有没有其他方法?
chensuwen 2005-12-28
  • 打赏
  • 举报
回复
如果本来是连接是正常的,对方突然网络中断或断电,我在另一端如果及时检测到这种意外呢?

18,356

社区成员

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

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