[求助]如何知道对方的socket连接已经关闭了?

bb2003 2005-09-29 05:04:46
如题,谢谢!
...全文
453 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MuseIn 2005-10-03
  • 打赏
  • 举报
回复
TO:football(gugu)
你测试一下吧。
sevencat 2005-10-03
  • 打赏
  • 举报
回复
自己判断
football 2005-09-30
  • 打赏
  • 举报
回复
to MuseIn(air supply * 学好Linux)::

如果当时对等socket没有close,并且有内容发送过来,你的方法能判断吗???
??????????????????/
周江涛 2005-09-30
  • 打赏
  • 举报
回复
补充:同步时:recv返回0表示正常关闭,返回socket_error表示异常断开。
周江涛 2005-09-30
  • 打赏
  • 举报
回复
如何知道对方的socket连接已经关闭了?

异步: 收到FD_CLOSE消息
同步: recv返回0
gohappy_1999 2005-09-30
  • 打赏
  • 举报
回复
mark
xxrl 2005-09-30
  • 打赏
  • 举报
回复
一般是采用心跳包的检测机制 主动去检测
jazy 2005-09-30
  • 打赏
  • 举报
回复
用FD_CLOSE消息判断还需要考虑异常断线:用WSAIoctl设置SIO_KEEPALIVE_VALS才可以
nuaawenlin 2005-09-29
  • 打赏
  • 举报
回复
加上heartbeat,检测不正常的退出
long_xing 2005-09-29
  • 打赏
  • 举报
回复
处理CSocket类的OnClose
如果对方的SOCKET关闭后,这个函数就会自动响应
MuseIn 2005-09-29
  • 打赏
  • 举报
回复
用recv来判断就可以。
numbytes=recv(cli_fd,(char *)&hdr,sizeof(hdr),0);
if (numbytes==0 || numbytes ==SOCKET_ERROR) {
clear_socketfd(cli_fd);
//perror("recv header error or socket closed");
return REV_HDR_ERROR;
}
football 2005-09-29
  • 打赏
  • 举报
回复
使用连接超时是不太可能的。系统默认的超时时间有1个多小时。

先用select,
在用recv.去判断。

请看msdn上的select函数中对select函数返回的注释。
readfds:
If listen has been called and a connection is pending, accept will succeed.
Data is available for reading (includes OOB data if SO_OOBINLINE is enabled).
Connection has been closed/reset/terminated.
lifengice0706 2005-09-29
  • 打赏
  • 举报
回复
recv()到socket_error(对端关闭)或双方定义echo(心跳)指令!
zhangnanonnet 2005-09-29
  • 打赏
  • 举报
回复
连接超时

18,356

社区成员

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

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