阻塞模式下的Linux TCP套接字

时间:2011-10-30 21:14:20

标签: linux sockets tcp network-programming network-protocols

当我在阻塞模式下创建TCP套接字并使用send(或sendto)函数时,函数调用将返回吗?

是否必须等到套接字的另一端收到数据?在这种情况下,如果互联网上有交通堵塞,它可能会长时间阻塞吗?

1 个答案:

答案 0 :(得分:3)

发件人和收件人(以及可能的中间人)都将缓冲数据。

成功发送数据并不保证接收端已收到数据。

通常写入阻塞套接字,只要发送方缓冲区中有空间,就不会阻塞。

一旦发送者的缓冲区已满,则写入将阻止,直到整个写入空间为止。

如果写入部分成功(接收器关闭套接字,关闭它或发生错误),则写入可能返回的字节数比您预期的少。后续写入应该给出错误或返回0 - 这样的条件在TCP套接字上是不可逆的。

请注意,如果后续的send()或write()发出错误,那么之前写入的某些数据可能会永远丢失。我不认为有一种真正的方法可以知道实际到达了多少数据(或者无论如何已经确认)。