1 select模型
利用select函数我们判断套接字上是否有数据,或者能不能向一个套接字写入数据,之所以采用这个函数是为了防止应用在I/O过程中(例如:send或Recv)被迫进入锁定状态。
例如 我们想测试一个套接字上是否有数据可读,可将其加入readfds集合,再等待select函数完成,select完成后必须判读自己的套接字是否认为readfds集合的一部分。在readfds、writefds、exceptfds中任何两个可以是NULL,但至少有一个不为空。在不为空的集合中至少包含一个套接字句柄,否则select函数没有句柄可以等待。
2 WSAAsyncSelect模型
将一些套接字和窗口关联起来,利用窗口的消息机制监听我们对不同的套接字感兴趣的网络事件
3 WSAEventSelect模型
把windows的事件对象和我们的套接字关联起来,利用API查询事件对象“受信”还是“未受信”状态,从而判读套接字上是否有网络事件发生
4 重叠I/O
发挥操作系统的I/O处理优势,操作系统自己开辟轻量级线程来等待我们关心的网络事件,一旦事件发生操作系统使和套接字对应的事件对象“受信”或者调用我们提供的回调例程(要注意线程是否处于警觉状态)。