如何判断一个socket已经断开?

vc_xx 2008-03-05 10:52:48
比如说,我建立的这个连接,
SOCKET sockconn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
怎么判断 该sockconn已经断开?

我这是为了处理在服务器与客户机传输数据过程中,客户机意外断开时用的
...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangwww_sl 2008-03-05
  • 打赏
  • 举报
回复
同意楼上的,不过建议以连续三个包为判断标准,若连续三个包都没有收到返回的则判断为断开,这样可以避免因网络丢包而造成的重复连接。
其中若第一个包没有返回,那么剩下的两个包的发送时间可以按1/2上个时间为界发送,当然也可以选其他的,思路如此……
annvily 2008-03-05
  • 打赏
  • 举报
回复
客户端每隔一段时间给服务器发个心跳包
收到即为还连接
未收到就断定断开,需要重连
vc_xx 2008-03-05
  • 打赏
  • 举报
回复
我想在服务器端处理这样的情况:
客户端好长时间没给我传数据了,他是已经断开了还是怎么的?

我该怎么判断与客户端的连接已经断开??
晨星 2008-03-05
  • 打赏
  • 举报
回复
断开了的服务器socket,accept不会失败么?
vc_xx 2008-03-05
  • 打赏
  • 举报
回复
能不能具体说一下这个函数的用法?后边的这几个
SOL_SOCKET, 0x700C/*SO_CONNECT_TIME*/, (char *)&Connect_Time, &Size
是什么意思?谢谢
僵哥 2008-03-05
  • 打赏
  • 举报
回复
getsockopt(Socket, SOL_SOCKET, 0x700C/*SO_CONNECT_TIME*/, (char *)&Connect_Time, &Size)
僵哥 2008-03-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vc_xx 的回复:]
能不能具体说一下这个函数的用法?后边的这几个
SOL_SOCKET, 0x700C/*SO_CONNECT_TIME*/, (char *)&Connect_Time, &Size
是什么意思?谢谢
[/Quote]
使用SO_CONNECT_TIME来取得连接的时间,如果连接已经断开,则会返回相应的错误码。
晨星 2008-03-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vc_xx 的回复:]
我想在服务器端处理这样的情况:
客户端好长时间没给我传数据了,他是已经断开了还是怎么的?

我该怎么判断与客户端的连接已经断开??
[/Quote]
那种情况,receive会失败的。

18,356

社区成员

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

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