WSAAsyncSelect()
简述:
通知套接口有请求事件发生.
#include <winsock.h>
int PASCAL FAR WSAAsyncSelect ( SOCKET s, HWND hWnd,
unsigned int wMsg, long lEvent );
s 标识一个需要事件通知的套接口的描述符.
hWnd 标识一个在网络事件发生时需要接收消息的窗口句柄.
wMsg 在网络事件发生时要接收的消息.
lEvent 位屏蔽码,用于指明应用程序感兴趣的网络事件集合.
注释:
本函数用来请求 Windows Sockets DLL 为窗口句柄发一条消息-无论它何时检测到由
lEvent 参数指明的网络事件.要发送的消息由 wMsg 参数标明.被通知的套接口由 s 标识.
本函数自动将套接口设置为非阻塞模式.
lEvent 参数由下表中列出的值组成.
值 意义
FD_READ 欲接收读准备好的通知.
FD_WRITE 欲接收写准备好的通知.
FD_OOB 欲接收带边数据到达的通知.
FD_ACCEPT 欲接收将要连接的通知.
FD_CONNECT 欲接收已连接好的通知.
FD_CLOSE 欲接收套接口关闭的通知.
启动一个 WSAAsyncSelect()将使为同一个套接口启动的所有先前的 WSAAsyncSelect()
作 废 . 例 如 , 要 接 收 读 写 通 知 , 应 用 程 序 必 须 同 时 用 FD_READ 和 FD_WRITE 调 用
WSAAsyncSelect(),如下:
rc = WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE);
对不同的事件区分不同的消息是不可能的.下面的代码将不会工作;第二个调用将会使第一
次调用的作用失效,只有 FD_WRITE 会通过 wMsg2 消息通知到.
rc = WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);
rc = WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);
如果要取消所有的通知,也就是指出 Windows Sockets 的实现不再在套接口上发送任何和
网络事件相关的消息,则 lEvent 应置为 0.
rc = WSAAsyncSelect(s, hWnd, 0, 0);
尽管在本例中,WSAAsyncSelect()立即使传给该套接口的事件消息无效 , 仍有可能有消息
等 在 应 用 程 序 的 消 息 队 列 中 . 应 用 程 序 因 此 也 必 须 仍 准 备 好 接 收 网 络 消 息 - 即 使 消 息 作 废 . 用
closesocket()关闭一个套接口也同样使 WSAAsyncSelect()发送的消息作废,但在 closesocke()之前
队列中的消息仍然起作用.
由于一个已调用 accept()的套接口和用来接收它的侦听套接口有同样的属性 , 任何为侦听