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

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

1、读操作

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

2、写操作

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

3、accept

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

4、connnect

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

转载于:https://www.cnblogs.com/luiz/p/6828829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值