socket中阻塞与非阻塞,同步与异步
简单点说: 阻塞就是干不完不准回来, 非阻塞就是你先干,我先看看有其他事没有,完了告诉我一声。
我们拿最常用的send和recv两个函数来说吧。比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话,这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket,send函数将不返回,直到系统缓冲区有足够的空间把你要发送的数据Copy过去以后才返回。而对于非阻塞的socket来说,send会立即返回,WSAEWOULDDBLOCK告诉调用者说:"发送操作被阻塞了