0

当阻塞样式recv()或被recvfrom()使用时,如下

 while(1){
     recv(sock_fd, buf, n, 0);    // when it returns and continue to execute the next line
     do_something();
     .....
   }

如果是 UDP,recv()如果它得到一个 UDP 数据包将返回。

但是对于 TCP,由于是字节流,似乎没有什么规则recv()应该返回。谁能解释一下?谢谢

4

1 回答 1

1

对于流套接字,recv()一旦有任何数据可供传递,就会立即返回。read()它与(在非套接字文件描述符上)的规则相同。这意味着您可能只收到一个字节。当recv()(或recvmsg()recvfrom()read())返回时,您将获得所有恰好可用且适合您的缓冲区的数据,因此您实际上很可能一次获得超过一个字节的数据,除非另一端仅发送一个字节,然后等待。

于 2013-04-12T22:15:34.247 回答