异步io通知 WSAEventSelect

WSAEventSelect是Windows平台下select函数的增强版,提供异步通知功能。它不同于数据传送的异步,而是一种异步阻塞模型。与select不同,WSAEventSelect在事件发生时即返回,而select则在数据可读时返回。WSAEventSelect与epoll的编程模型相似。核心函数包括:WSACreateEvent、WSAEventSelect、WSAWaitForMultipleEvents和WSAEnumNetworkEvents。使用这些函数,开发者可以实现高效地处理多个套接字事件。
摘要由CSDN通过智能技术生成

WSAEventSelect 就是 select的增强版;

注意WSAEventSelect 是通知异步, 而不是传送数据异步;

总的来说就是一个异步的阻塞模型;

 

如果要与 select 做个比较的话 :

select 在 需要进行或者可以进行io处理时 返回. 而WSAEventSelect 在返回时(WSAWaitForMultipleEvents) 与io状态无关;

例如: select  在收到数据 并返回时 , 他监听此套接字并检查接受缓冲区, 等到缓冲区能读时再返回.

而WSAEventSelect 的等待函数 WSAWaitForMultipleEvents 只要此套接字有事件发生就返回; 

因此称为异步通知;

另WSAEventSelect 与 nix下的 epoll 整体编程模型很像; epoll : epoll 说明

 

具体使用到的函数:

WSACreateEvent  创建一个事件, 默认手动模式

WSAEventSelect  让一个套接字与一个事件捆绑在一起 注册到操作系统, 无需像select 每次重置;

 

*   WSAWaitForMultipleEvents (阻塞)  等待套接字对应的事件发生, 最多能监听WSA_MAXIMUM_WAIT_EVENTS 个事件;

 *  WSAEnumNetworkEvents  查看套接字对应的具体事件 ; 这也就是与select 返回时机的不同的原因; 注意:此函数将重置事件,

                                                 因此无需调用WSAResetEvent;

 

重要就这4个函数, 其他的函数调用查看msdn 即可

 

echo_serv.c

#include "../utils.h"
#define BUFF_SIZE 8192

//关闭套接字后 . 调整数组
static void adjust_sockarr(SOCKET * sock_arr, int start_index, int total){
	for (int i = start_index; i < total; ++i)
		sock_arr[i] = sock_arr[i + 1];
}

//关闭事件后, 调整数组
st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值