你对write()手段的回报价值感到困惑.这并不意味着,"同行得到了数据并承认了它".相反,它意味着,"我缓冲了太多的字节发送给同行,他们现在是我的责任,所以你可以忘记它们(我没有任何未决的错误)".
也就是说,如果TCP堆栈接受写入并返回n个字节,这并不意味着它们已经被写入,只是排队等待写入.在堆栈放弃并向您返回错误之前,它可能需要一些时间,也就是它开始发送网络流量后30秒.在此期间,您可以完成多次调用,write()这些调用成功排队数据以进行发送.(如果对等体消失,则写入错误将在c.30s中返回,或者如果可以联系对等体并立即发送RST数据包以指示连接已死,则立即返回写入错误.)