一次投递一个或多个 Winsock I/O请求

时间:2022-06-07 05:12:15

  由于篇幅原因,本文假设你已经熟悉了操作Socket进行TCP/IP编程的基来源根底理,并且也熟练的掌握了多线程编程技术,太根基的观点我这里就略过不提了,网上的资料应该到处都是。

  IOCP全称IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows I/O模型,它可以自动措置惩罚惩罚I/O操纵,并在I/O操纵完成后将完成通知发送给用户。本文主要介绍基于IOCP的网络I/O操纵(即socket的Accept、Send、Recv和Close等)。Windows供给了6种网络通信模型,分袂是:

梗阻模型:accept、recv和send操纵会梗阻线程,直到操纵完成,极其低效。

选择(select)模型:轮询方法探测socket上是否有收发的操纵,再挪用accept、recv和send操纵,核心是select()函数,比梗阻模型高效一点,错误谬误是一次只能探测64个socket,需要手动挪用recv和send进行收发数据。

异步选择(WSAAsyncSelect)模型:操作Windows窗口动静机制响应socket操纵,即当socket上有Accept、Send、Recv和Close操纵产生时发送一条自界说动静给指定窗口,在窗口中响应socket操纵,需要手动挪用recv和send进行收发数据。与select模型对比,不需要轮询方法探测socket,socket上有操纵产生即发送通知给窗口窗口,错误谬误是需要一个窗口东西措置惩罚惩罚socket的动静,需要手动挪用recv和send进行收发数据。

事件选择(WSAEventSelect)模型:道理根基同WSAAsyncSelect模型,但是不需要窗口,操作事件(Event)机制来获取socket上产生的I/O操纵。错误谬误是一次只能期待64个事件,需要手动挪用recv和send进行收发数据。

重叠 I/O(Overlapped I/O)模型:操作重叠数据布局(WSAOVERLAPPED),一次投递一个或多个Winsock I/O请求,,等这些请求完成后,应用措施会收到通知,用户可以直接使用 I/O操纵返回的数据。简单的说:投递一个WSASend请求和接受数据的缓冲区,系统在接收完成后在通知用户,用户可以直接收到的数据,WSASend操纵同理。有两种方法来打点重叠IO请求的完成情况(就是说接到重叠操纵完成的通知):

1). 事件东西通知(event object notification)

2). 完老例程(completion routines) ,注意,这里并不是完成端口

长处是不用管收发过程,直接供给(发送时)/使用(接收时)数据。错误谬误是实现略庞大。