现在的位置: 首页 > 综合 > 正文

关于WSAAsyncSelect模型中FD_WRITE事件触发的时机!

2012年08月14日 ⁄ 综合 ⁄ 共 957字 ⁄ 字号 评论关闭

使用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的低字部分。

抱歉!评论已关闭.