Windows网络编程之事件选择模型(三)

发布时间 2023-09-29 13:18:09作者: TechNomad

一、WSACreateEvent函数

WSACreateEvent函数是Windows套接字API中的一部分,它用于创建套接字事件对象,以便在套接字操作上等待事件发生。这个函数通常与异步套接字操作一起使用,以允许应用程序异步地等待套接字事件的发生,而不需要阻塞线程。

函数原型:

WSAEVENT WSAAPI WSACreateEvent(void);

参数:

无需传递任何参数。

返回值:

  • 如果成功,函数返回一个WSAEVENT类型的句柄,代表创建的套接字事件对象。
  • 如果失败,函数返回WSA_INVALID_EVENT,并且可以通过WSAGetLastError()函数获取错误代码。

二、WSAEventSelect函数

WSAEventSelect函数是Windows套接字编程中常用的函数,用于指定一个或多个事件,以便在套接字上等待这些事件的发生。这个函数通常与异步套接字一起使用,以允许应用程序在等待事件发生时不会阻塞线程。

函数原型:

int WSAEventSelect(
  SOCKET     s,
  WSAEVENT   hEventObject,
  long       lNetworkEvents
);

参数:

  • s:要关联事件的套接字的描述符。
  • hEventObject:一个套接字事件对象的句柄,通常通过WSACreateEvent函数创建。
  • lNetworkEvents:一个标志位,用于指定要关联的事件类型。可以使用各种常量来设置这些标志,例如FD_READFD_WRITEFD_ACCEPTFD_CONNECT等。
    1. FD_ACCEPT:有客户端链接,与服务器socket绑定。
    2. FD_READ:有客户端发来消息,与客户端socket绑定,可多个属性并列用。
    3. FD_CLOSE:客户端下线,与客户端socket绑定,包含强制下线,正常下线。
    4. FD_WRITE:可以给客户端发送信息,与客户端socket绑定,会在accept后立即主动产生该信号,可以说明,客户端链接成功,即可随时发送信息。
    5. FD_CONNECT:客户端一方,给服务器绑定这个。
    6. 0:取消事件监视

返回值:

  • 如果函数成功,返回值为0。
  • 如果函数失败,返回值为SOCKET_ERROR,并且可以通过WSAGetLastError()函数获取错误代码。