如何判断一个socket连接是否关闭?

wangcn 2007-05-16 05:14:42
如何判断一个socket连接是否关闭?
...全文
1658 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlzx 2007-05-27
  • 打赏
  • 举报
回复
如果你要判断网络状况,可以发心跳包什么的,

如果是想判断下本机的那个SOCKET是不是有效的,可以select,最后的参数结构里都为0可以马上返回,看下select的返回值就可以啦
Jazzlover 2007-05-21
  • 打赏
  • 举报
回复
struct tcp_keepalive inKeepAlive, outKeepAlive;
unsigned long ulInLen, ulOutLen, ulBytesReturn;
inKeepAlive.onoff = 1;
inKeepAlive.keepaliveinterval = 30000;
inKeepAlive.keepalivetime = 300000;
ulInLen = sizeof(tcp_keepalive);
ulOutLen = sizeof(tcp_keepalive);
ulBytesReturn = 0;
memset( &outKeepAlive, 0, sizeof(tcp_keepalive) );
if (WSAIoctl(sock, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen,
(LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL) == SOCKET_ERROR){ writelog("WSAIoctl(keep alive) failed. error code = " + WSAGetLastError()) ;
}

如果 socket 关闭你就会接到通知。
p.s. 我的程序是 IOCP 的,通知从 GetQueuedCompletionStatus() 返回中得到。估计要是用 select() 的话,也可以从 errorlist 中得到;
老夏Max 2007-05-16
  • 打赏
  • 举报
回复
LOOK
V九门提督V 2007-05-16
  • 打赏
  • 举报
回复
发心跳包
www.google.com
解决了别忘了告诉我………

18,356

社区成员

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

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