1.非阻塞模式Socket 编程
从第一感觉上来讲,非阻塞模式没有阻塞模式清晰。阻塞模式效率太低下,非阻塞模式也没有提高多少。但是非阻塞模式的思想很重要。
非阻塞模式:调用函数后立即返回,不等待结果。-->异步
阻塞模式:等待结果再返回。-->同步
非阻塞模式之所以看起来不清晰,主要是需要由许多while语句调用send与recv。遇到SOCKET_ERROR如果是错误是WSAEWOULDBLOCK,需要continue,如果是其他错误也要看情况处理,比如connect时遇到WSAEISCONN时,代表了链接成功,就要退出while循环。
总结:许多while,不够高效。
2.Select模型Socket 编程
周而复始的检查,把不就绪的剔除读、写集合(队列),返回就绪的套接字数量。
相关重要内容:
1、 FD_ISSET:判断该套接字是否集合中,在则就绪,不在,说明因为未就绪被select踢了;
2、FD_SET:将套接字加入到待检查的集合(队列)。
总结:一个大while,每次把需要检查的套接字加入到待select检查读、写集合,然后FD_ISSET判断是否在集合中,在则就绪。
3. Event模型Socket 编程
看课本看的迷迷糊糊的,看些文章参考下吧。
msdn博客上的篇文章,对着几种都做了概述,并且感觉很清晰。