调用了closesocket(),但为什么收不到FD_CLOSE事件发生信息?

lqj77 2006-09-02 04:41:06
相关关键代码如下:
WSAEventSelect(m_Socket,m_EnentHandle,FD_CLOSE | FD_READ);
WSAWaitForMultipleEvents(1, &m_EnentHandle, FALSE, 100, FALSE);
WSANETWORKEVENTS hNetworkEvent;
WSAEnumNetworkEvents(m_Socket, m_EnentHandle, &hNetworkEvent);
if (hNetworkEvent.lNetworkEvents & FD_CLOSE)
{
printf("Network event is Close.\n");
}

以上内容是在一个单独的线程里循环执行的,我在其他地方调用了closesocket()函数,希望能打出“Network event is Close”这个内容,但好像总是不行,为什么啊?望高手指点。
...全文
353 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
drjojo 2006-09-04
  • 打赏
  • 举报
回复
WSAEVENT wsaevent = WSACreateEvent();
if (wsaevent != WSA_INVALID_EVENT)
WSAEventSelect(s, wsaevent, FD_CLOSE|FD_READ);
....
WSANETWORKEVENTS EventStatus = {0};
WSAWaitForMultipleEvents(1, &wasevent, FALSE,0, FALSE);
WSAEnumNetworkEvents(s, wasevent, &EventStatus);

if (EventStatus.lNetworkEvents & FD_CLOSE)
if (EventStatus.iErrorCode[FD_CLOSE_BIT] == 0)
printf("Network event is Close.\n");
lqj77 2006-09-03
  • 打赏
  • 举报
回复
那如果对方没有调用closesocket()呢?那怎么判断客户机是否已经断开了呢?
nuaawenlin 2006-09-02
  • 打赏
  • 举报
回复
FD_CLOSE是对方发过来触发的

18,357

社区成员

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

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