使用阻止样式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()
应该返回时似乎没有规则。
任何人都可以解释一下吗?感谢
答案 0 :(得分:1)
对于流套接字,只要有任何数据可供传递,recv()
就会返回。它与read()
的规则相同(在非套接字文件描述符上)。这意味着您可能只收到一个字节。当recv()
(或recvmsg()
或recvfrom()
或read()
)返回时,您将获得恰好可用且适合您的缓冲区的所有数据,因此您将实际上很可能一次获得多个字节的数据,除非另一端只发送一个字节然后等待。