【发布时间】:2016-03-12 05:28:21
【问题描述】:
据我了解 TCP/IP,它不能保证接收方 (B) 是否真的从发送方 (A) 收到任何数据。例如:
A: socket.write(1);
B: socket.read(); // this can fail and A wouldn't know unless B sends an ACK
我一直在想,相反的情况也可能吗?
A: socket.write(1); // can this fail while B does receive "1" without any error?
B: socket.read();
【问题讨论】:
-
当然不能。这个问题没有意义。
-
@EJP:我担心的原因是,我看到了即使紧接着断开连接(即另一端无法接收数据)写入/发送也会成功的情况,所以我不确定在什么情况下写/发送操作可以失败。 SergeyA 的答案正是我想要的。
-
这个问题似乎 100% 有效,我也经历过。写入套接字失败,但收到消息。大多数时候我注意到失败是由于超时或发送缓冲区中的空间不足。添加重试逻辑有助于在一定程度上摆脱它。