win32 socket中有些函数是默认阻塞的,比如accept(),send(),recv()等等,其中send()与recv()的阻塞概念与accept()的阻塞概念不同。
send()与recv()只是完成数据的拷贝工作,即send()函数仅仅是将数据放到发送缓冲区中,至于实际的发送工作由网络协议完成;recv()函数仅仅是从接收缓冲区中读取数据,实际接收数据的操作由网络协议完成。send()的阻塞主要由发送数据填满发送缓冲区产生的,recv()的阻塞则是由接收缓冲区中没有数据可读引起的。
socket阻塞与非阻塞的设置由函数ioctrlsocket()函数完成,相应的阻塞时限由函数setsockopt()进行设置。详见参考资料。
参考资料1相关设置函数
参考资料2相关概念