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

WSAAsyncSelect 说明

2013年12月09日 ⁄ 综合 ⁄ 共 866字 ⁄ 字号 评论关闭

       这个函数提供的是一种异步I/O模型。利用这个模型,应用程序可以在一个套接字上 接收以WINDOWS消息为基础的网络事件通知。 要想使用WSAAsyncSelect模型,在应用程序中,首选必须使用CreateWindow函数创建一个窗口,再为窗口提供一个例程支持函数。也可以使用一个对话框,为它提供一个对话例程。需要注意的是多个事件务必要在套接字上一次注册。还有就是,一旦在某个套接字上允许了事件通知,那么以后除非明确调用closesocket命令,或者由应用程序针对那个套接字调用WSAAsyncSelect,从而更改了注册的网络事件类型,否则的话,事件通知会永远有效!若将IEent参数设置为0,效果相当于停止套接字上的所有网络事件通知。

      如果应用程序对一个套接字调用了WSAAsyncSelect,那么套接字的模式会从“锁定”自动变为“非锁定”。我们就通过判断uMsg参数指定的用户自定义窗口消息,来判断网络事件类型(由lParam参数的低字节指出)何时在套接字上发生,然后在去做相应的处理。比如,FD_READ消息,我们就可以知道有数据读入,这时候我们就可以做读入处理了。

      对于WSAAsyncSelect所相对应的窗口例程,它的hWnd参数指定的是WSAAsyncSelect所对应的窗口的句柄,uMsg指出需要对那些消息进行处理。wParam参数指定在其上面发生了一个网络事件的套接字。lParam参数高字节指出可能出现的任何错误代码。低字节指出已经发生了什么网络事件。
#define WSAGETSELECTERROR(lParam)       HIWORD(lParam)
#define WSAGETSELECTEVENT(lParam)       LOWORD(lParam)

     作为FD_WRITE事件通知,当建立连接(connect),或者接受连接(accept),或者是发送数据失败时候,所以一个应用程序,如果在发送数据失败时,就应该用另一条FD_WRITE通知应用程序再次发送数据。

抱歉!评论已关闭.