WSAEventSelect模型中FD_READ 网络事件的处理

FD_READ:    FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock会以FD_READ事件通知你, 对于每一个FD_READ事件,调用recv()即可读取到数据,如果传递给recv()的缓冲区不足以一次容纳所有数据,还有,不一定每一次调用recv()都会接收到一个完整的数据包, 因为数据可能不会一次性全部发送过来. 所以在开始处理接收到的数据之前, 最好对接收到的字节数(即recv()的返回值)进行判断,看看是否收到的是一个完整的数据包。如果传递给recv()的缓冲区不足以一次容纳所有数据,那系统会保持FD_READ事件(也就是再次设置对应的事件为激发状态),直到完全读取了所有接收到的数据为止。因此可以多次调用recv()函数进行数据的接收,避免多次向系统发生FD_READ事件通知,具体做法是:首先调用WSAEventSelect()函数,取消为该套接字祖册的网络事件。当该函数返回时,再调用WSAEventSelect()函数为该套接字注册FD_READ和FD_CLOSE网络事件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值