簡體   English   中英

在C和C ++中發送有關UDP套接字的信息

[英]send about UDP socket in C and C++

  1. 一個名為“ connect”並使用“ send”發送數據的無阻塞UDP套接字,是否有必要使用“ select / epoll / kqueue”來測試其是否可寫? 在這種情況下,另一端的recv緩沖區已滿,“發送”可能會失敗,因此我可以使用“選擇”來測試它是否可寫,以便“發送”可以返回成功? 還是沒有必要,因為它只是發送數據,而不在乎側面的recv buff是否已滿? 如果是這樣,那么“發送”可能只會返回成功,除非另一端失敗了?
  2. 對於UDP套接字,“ send”的返回值是多少,例如,我發送100個字節,它可能僅返回-1(錯誤)或100,沒有其他值? 對於TCP可能會返回50 ~~~~

在這種情況下,另一端的recv緩沖區已滿,“發送”可能會失敗,因此我可以使用“選擇”來測試其是否可寫,以便“發送”可以返回成功?

您正在使用UDP。 數據包被發送,並且如果接收端的接收緩沖區已滿,則接收系統將丟棄它。 閱讀此內容: https : //en.wikipedia.org/wiki/User_Datagram_Protocol#Reliability_and_congestion_control_solutions

send()調用的結果將完全獨立於接收者的狀態。 即使接收方不存在,它也會返回成功。

有關UDP如何處理大於基礎網絡的數據包大小的數據報,請參見此內容。 發送成功但無法接收大緩沖區

通常,除非內核中的本地(發送)緩沖區已滿,否則send()不會阻塞,並且始終返回寫入的字節數。 對於UDP套接字,這基本上不會發生。 對於TCP套接字,如果您編寫的速度超出鏈接或接收方的處理能力,則會發生這種情況。

暫無
暫無

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

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