套接字的I/O模式有6种:阻塞模型,select模型,WSAAsyncSelect模型,WSAEventSelect模型,重叠I/O,以及完成端口。
阻塞模型:一个套接字操作完成后,另外一个操作才能进行。
优点:简单。
缺点:消耗资源多,难扩展。
select模型:判断套接字上是否存在数据,或者能否向一个套接字写入数据。select函数在制定的集合中筛选出满足要求的套接字,应用程序只需要遍历套接字链表,逐个处理。
优点: 提供多连接。
缺点: 一般只支持64个连接。
WSAAsyncSelect模型: 异步通知套接字读写数据能力。
优点: 异步通知,无需阻塞。
缺点: 一般只支持64个连接,而且需要窗口句柄。
WSAEventSelect模型:异步通知套接字读写数据能力。
优点: 异步通知,无需阻塞。
缺点: 一般只支持64个连接。
重叠I/O模型:采用重叠的数据结构,一次投递一个或者多个I/O请求。对多套接字情况,每个套接字操作都需要一个重叠的数据结构。不同的套接字需要不同的重叠数据结构,同一个套接字的不同操作,比如读和写,也需要不同的重叠数据结构。所以说,重叠的是同一个套接字操作上的数据处理,而不是不同的套接字或者不同的操作。