阻塞I/O和非阻塞I/O

套接字的默认状态均为阻塞,产生阻塞的操作有下面四类

1、读操作

read时对于一个阻塞套接字,如果该套接字的接收缓冲区没有数据可读,则该进程将被投入睡眠,直到有数据到达。对于非阻塞套接字如果接收缓冲区没有数据可读则调用会立即返回一个EWOULDBLOCK错误。

2、写操作

write时对于一个阻塞套接字,如果该套接字的发送缓冲区没有空间,则该进程将被投入睡眠,直到有空间为止。对于非阻塞套接字如果发送缓冲区没有空间则调用会立即返回一个EWOULDBLOCK错误。如果有部分空间则返回值将是该缓冲区中的字节数。

3、accept

对于一个阻塞套接字,accept函数被调用时在没有新的连接到达时进程会一直被投入睡眠。于非阻塞套接字调用会立即返回一个EWOULDBLOCK错误。

4、connnect

阻塞套接字将会阻塞到三次握手的最后一个ACK,对于一个非阻塞套接字连接不能立即建立时会返回一个EINPROGRESS错误,表示连接建立已经启动但是尚未完成。

posted @ 2016-11-26 15:37  luizp  阅读(131)  评论(0编辑  收藏  举报