Linux TCP套接字处于阻塞模式

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

是否需要等到套接字的另一端接收到数据?在这种情况下,如果互联网上出现交通拥堵,它会长时间阻塞吗?

最佳答案
发送者和接收者(以及可能的中介)都将缓冲数据.

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

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

一旦发送者的缓冲区已满,则将写入WILL块,直到其中有用于整个写入的空间为止.

如果写操作部分成功(接收器关闭了套接字,关闭了套接字或发生了错误),则写操作返回的字节数可能会比您预期的要少.随后的写操作应给出错误或返回0-这种情况在TCP套接字上是不可逆的.

请注意,如果随后的send()或write()给出错误,则某些先前写入的数据可能会永远丢失.我认为没有一种真正的方法可以知道实际到达(或无论如何已确认)多少数据.

转载注明原文:Linux TCP套接字处于阻塞模式 - 代码日志