使用connect或WSAConnect,一个套接字首次建立了连接。
■ 使用a c c e p t或W S A A c c e p t,套接字被接受以后。
■ 若s e n d、W S A S e n d、s e n d t o或W S A S e n d To操作失败,返回了W S A E W O U L D B L O C K错
误,而且缓冲区的空间变得可用
因此,作为一个应用程序,自收到首条F D W R I T E消息开始,便应认为自己必然能在一
个套接字上发出数据,直至一个s e n d、W S A S e n d、s e n d t o或W S A S e n d To返回套接字错误
W S A E W O U L D B L O C K。经过了这样的失败以后,要再用另一条F D W R I T E通知应用程序再
次发送数据。
对于这个异步模型。主要步骤如下:
1.创建一个套接字。
2.将套接字绑定到本机。
3.将绑定好的套接字通过WSAAsyncSelect与特定的网络事件关联起来。
4.在窗口过程中对于特定的网络事件进行响应!
WSAAsyncSelect(ListenSocket,hWnd , WM_SOCKET, FD_ACCEPT | FD_CLOSE)
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
其中!在窗口过程中
就我们的情况来说,感兴趣的是W S A A s y n c S e l e c t调用中
定义的消息。w P a r a m参数指定在其上面发生了一个网络事件的套接字。假若同时为这个窗口
例程分配了多个套接字,这个参数的重要性便显示出来了。在l P a r a m参数中,包含了两方面
重要的信息。其中, l P a r a m的低字(低位字)指定了已经发生的网络事件,而l P a r a m的高字
(高位字)包含了可能出现的任何错误代码。网络事件消息抵达一个窗口例程后,应用程序首先应检查l P a r a m的高字位,以判断是否在
套接字上发生了一个网络错误。这里有一个特殊的宏: W S A G E T S E L E C T E R R O R,可用它返回
高字位包含的错误信息。若应用程序发现套接字上没有产生任何错误,接着便应调查到底是哪
个网络事件类型,造成了这条Wi n d o w s消息的触发—具体的做法便是读取l P a r a m之低字位的
内容。此时可使用另一个特殊的宏:W S A G E T S E L E C T E V E N T,用它返回l P a r a m的低字部分。