簡體   English   中英

Linux 上的 UDP 套接字上的 send、sendto 和 sendmsg 的可能返回值是多少?

[英]What are the possible return values for send, sendto and sendmsg on a UDP socket on Linux?

這些函數在錯誤時返回 -1,在成功時返回輸入長度。 在什么情況下,對於 Linux 上的 UDP 套接字,它們可能返回小於長度且大於或等於 0 的值?

這個 StackOverflow 問題類似,但在非 Linux RTOS 的上下文中。 答案斷言它不可能發生,並且操作系統供應商與他們相矛盾。 這個 StackOverflow 問題類似,但接受的答案只討論收據。 Beej 的指南斷言它可能會發生。 libuv斷言它不能。 POSIX 似乎並沒有禁止它。

因此,我很好奇什么情況(如果有的話)會導致 Linux 上 UDP sockets 的“短寫”返回值? POSIX 中是否有禁止它的互聯網 RFC 或條款? 例如,如果 UDP 數據報被分段(在多個 IP 數據包中發送),這種情況會發生嗎?

UDP 是一個數據報協議,即它不是一個字節 stream 就像 TCP 但協議內部有明確的消息邊界。 這些消息語義在閱讀時會反映出來,即單個recv將返回單個(和完整)消息。

單個消息(數據報)通過單個send ,沒有其他方法可以指定消息邊界。 但是“短發送”會在它們不屬於的地方引入消息邊界,因此對於 UDP 來說應該是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM