+ -
当前位置:首页 → 问答吧 → WSAEventSelect方式下 调用WSAWaitForMultipleEvents后lNetworkEvents的值是 33

WSAEventSelect方式下 调用WSAWaitForMultipleEvents后lNetworkEvents的值是 33

时间:2011-11-25

来源:互联网

::WSAEventSelect(sok, event, FD_READ|FD_CLOSE); 
注册 FD_READ|FD_CLOSE 这两个事件后 
C/C++ code

WSANETWORKEVENTS wsaEvent;
::WSAEnumNetworkEvents(soc, event, &wsaEvent);



wsaEvent.lNetworkEvents 的值是33 相当于 FD_READ|FD_CLOSE,但这个时候recv 并没有接收完毕 如果此时处理FD_CLOSE 调用closesocket 关闭连接的话,缓存中的内容就接收不到了.如果不处理FD_CLOSE 那么后面也不会再发送FD_CLOSE 就没有机会调用closesocket了

我对网络编程不是太熟悉,不知道大家遇到这个情况是怎么处理的.

作者: zzw827   发布时间: 2011-11-25

记得只要注册FD_READ就可以了。close的时候也会signal。read的时候区别是有数据来了还是关闭了。

作者: ndy_w   发布时间: 2011-11-25

FD_READ|FD_CLOSE. 你后来等待到event时.获得事件下标.还可以判断是哪个event. FD_READ还是FD_CLOSE. 具体网上搜下.. FD_CLOSE当网络断开时并不会100%获得这个事件.

作者: smwhotjay   发布时间: 2011-11-25