1. 阻塞IO
Recv函数默认是阻塞的,直到对方发送过来的数据被填充到用户提供的接收缓冲区之后,才解除阻塞。Recv函数的接收缓冲区由用户提供(recv的形参)。
注意,对方发送过来的数据最先到达内核空间中的缓冲区,然后从内核空间拷贝到用户提供的用户态缓冲区(buffer),以供用户态程序使用。拷贝完成后recv函数就返回了。
从等待对方发送数据到接收数据,并把数据从内核空间复制到用户空间的这段时间内,recv函数是阻塞的。
2. 非阻塞IO
可用fcntl函数设置recv为非阻塞方式,具体的做法如下:
fcntl ( fd, F_SETFL