[英]Socket communication: can send fail when receive succeeded?
據我了解 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();
send()
調用有 4 種不同的可能結果:
send()
返回等於它的第三個參數 (len) 的字節數。 這意味着,消息已成功放入 TCP 堆棧,現在堆棧將盡力傳遞它。send()
返回 -1。 這意味着,存在本地可檢測錯誤。 例如,套接字未連接,消息太大而無法原子傳遞等。沒有發送任何內容。 errno
將具有錯誤的實際原因。send()
返回一個非負數,不等於它的第三個參數。 這意味着, send()
無法發送整個消息,而是發送了其中的一部分。 最可能的原因是非阻塞的send()
調用,並且發送緩沖區中沒有空間容納其余部分。 errno 可能會設置為 EAGAIN (EWOULDBLOCK)。 這意味着,消息的某些部分已發送,因此接收者可以看到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.