WSAAsyncSelect 模型允许应用程序以windows消息的形式接受网络事件通知
这个模型是为了适应windows的 消息驱动环境设置的, 对性能要求不高的网络
应用程序采用这个模型,MFC的CSoket采用这个模型
WSAAsyncSelect 函数会自动把函数设置为非阻塞模式,并且为套接字绑定一个窗口句柄
当有网络时间发生时,向这个窗口发消息
int WSAAsyncSelect(
SOCKET s, // 需要设置的套接字句柄
HWND hWnd, // 指定一个窗口句柄
// 套接字的通知消息将被发送到与其对应的窗口过程中
u_int wMsg, // 网络事件
// 可以使用WM_USER以上的数值中任意选择一个做为ID
long IEvent // 指定哪些通知码需要发送
);
最后一个参数IEvent 指定要发送的通知码
FD_READ 接收到对方发过来的数据包,表明这时可以去读套接字了
FD_WRITE 数据缓冲区满后再次变空时,WinSock接口通过该 通知码通知应用程序
表示可以发送数据了(短时间内发送数据过多,便会造成数据缓冲区变满)
FD_ACCEPT 监听中的套接字检测到有链接进入
FD_CONNECT - 如果用套接字连接对方的主机。当连接动作完成以后会接收到这个通知
FD_CLOSE - 检测到套接字对应的连接被关闭
::WSAAsyncSelect(sListen, hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE); //WM_SOCKET 自定义消息
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
wPARAM - 发生网络事件的套接字句柄
lParam - 参数的低字位指定了发生的网络事件,高字节包含了任何可能出现的错误代码
WSAGETSELECTERROR WSAGETSELECTEVENT 将这些信息给出来