Windows网络编程@[事件选择模型WSAEventSelect]
WSAEventSelect 模型
基本原理;
WSAEventSelect 模型:允许应用程序在一个或者多个套接字上接收基于事件的网络通知。它与WSAAsyncSelect模型类似是因为它也接收FD_ _XXX 类型的网络事件,不过并是依靠Windows的消息驱动机制,而是经由事件对象句柄通知。
使用这个模型的基本思路是为感兴趣的一组网络事件创建一个事件对象,再调用WSAEventSelect函数将网络事件和事件对象关联起来。当网络事件发生时,Winsock 使相应的事件对象受信,在事件对象上的等待函数就会返回。之后,调用WSAEnumNetworkEvents函数便可获取到底发生了什么网络事件。
思路:
创建一个事件对象–>事件对象和网络事件关联–>网络事件发生,事件对象受信–>得知是发生了什么网络事件
//创建一个事件对象 WSAEVENT ListenEvent = WSACreateEvent();
//事件对象和网络事件关联
int WSAEventSelect(
SOCKET s, //套接字句柄
WSAEVENT hEventObject, //事件对象句柄
long lNetworkEvents //网络事件
);
//网络事件与时间对象关联后,就在时间对象上等待,等待时间对象受信
// WSAWaitForMultipleEvents 最多支持64个对象(也就是最多等待64个套接字对象)
DWORD WSAWaitForMultipleEvents(
DWORD cEvents, //指定lphEvents所指数组中事件对象句柄个数