阻塞socket
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
对于文件操作read,fread函数调用会将线程阻塞
对于socket,accept与recv,recvfrom函数调用会将线程阻塞
对于socket,accept与recv,recvfrom函数调用会将线程阻塞
为了避免整个线程被阻塞后挂起,所以在阻塞模式下,往往需要采用多线程技术。
一个进程中可并发的线程总数是有限的,在处理大量客户端socket连接(比如上万client socket)通过线程并发处理socket并不方便,效率也不高。
非阻塞socket
非阻塞调用指调用立刻返回。
在阻塞模式下,accept与recv,recvfrom函数调用会立刻返回。
在nonblocking状态下调用 accept函数,如果没有客户端socket连接请求,那么accept函数返回-1,同时errno值为EAGIN或者EWOUDBLOCK,这两个哄定义都为整数11.
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
对于文件操作read,fread函数调用会将线程阻塞
对于socket,accept与recv,recvfrom函数调用会将线程阻塞
对于socket,accept与recv,recvfrom函数调用会将线程阻塞
为了避免整个线程被阻塞后挂起,所以在阻塞模式下,往往需要采用多线程技术。
一个进程中可并发的线程总数是有限的,在处理大量客户端socket连接(比如上万client socket)通过线程并发处理socket并不方便,效率也不高。
非阻塞socket
非阻塞调用指调用立刻返回。
在阻塞模式下,accept与recv,recvfrom函数调用会立刻返回。
在nonblocking状态下调用 accept函数,如果没有客户端socket连接请求,那么accept函数返回-1,同时errno值为EAGIN或者EWOUDBLOCK,这两个哄定义都为整数11.