WSAEnumNetworkEvents到底在什么情形下要被用到?

ewrwqe 2011-10-30 08:43:25
Winsock接受数据的时候,使用普通的accept,bind,listen,recv,send不就可以了么?

什么时候需要去处理一个socket的事件? 如果在等待数据的过程中,连接断了,应该read函数出错退出啊,也没有什么所谓的事件发生。

socket事件不就是收发数据,连接断开什么的么?

谢谢

...全文
119 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2011-10-30
  • 打赏
  • 举报
回复
WSAEventSelect模型
MSND上的例子

The following example demonstrates the use of the WSAEnumNetworkEvents function.


//-------------------------
// Declare and initialize variables
SOCKET SocketArray[WSA_MAXIMUM_WAIT_EVENTS],
ListenSocket;
WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS];
WSANETWORKEVENTS NetworkEvents;
sockaddr_in InetAddr;
DWORD EventTotal = 0, Index, i;

//-------------------------
// Create a listening socket
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
InetAddr.sin_family = AF_INET;
InetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
InetAddr.sin_port = htons(27015);

//-------------------------
// Bind the listening socket
bind (ListenSocket, (SOCKADDR *) &InetAddr, sizeof(InetAddr));

//-------------------------
// Create a new event
NewEvent = WSACreateEvent();

//-------------------------
// Associate event types FD_ACCEPT and FD_CLOSE
// with the listening socket and NewEvent
WSAEventSelect(ListenSocket, NewEvent, FD_ACCEPT|FD_CLOSE);

//-------------------------
// Start listening on the socket
listen(ListenSocket, 10);

//-------------------------
// Add the socket and event to the arrays, increment number of events
SocketArray[EventTotal] = ListenSocket;
EventArray[EventTotal] = NewEvent;
EventTotal++;

//-------------------------
// Wait for network events on all sockets
Index = WSAWaitForMultipleEvents(EventTotal,
EventArray,
FALSE,
WSA_INFINITE,
FALSE);
Index = Index - WSA_WAIT_EVENT_0;

//-------------------------
// Iterate through all events and enumerate
// if the wait does not fail.
for (i = Index; i < EventTotal; i++) {
Index = WSAWaitForMultipleEvents(1,
&EventArray[i],
TRUE,
1000,
FALSE);
if ((Index != WSA_WAIT_FAILED) && (Index != WSA_WAIT_TIMEOUT)) {
WSAEnumNetworkEvents(SocketArray[i],
EventArray[i],
&NetworkEvents);
}
}

...

18,356

社区成员

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

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