簡體   English   中英

如何處理send()中的緩沖區長度輸入和返回值大小不匹配?

[英]How to handle the buffer length input and return value size mismatch in send()?

send()*函數如何處理-
ssize_t retval = send(sock, buf, SIZE_MAX, 0);

如果send能成功發送SIZE_MAX個字節,則返回類型不足以處理這么大的值(通常為SSIZE_MAX〜= SIZE_MAX / 2)。

在這種情況下,send()函數是否將自身限制為僅發送SSIZE_MAX個字節?

* ssize_t send(int socket, const void *buffer, size_t length, int flags);
-https://linux.die.net/man/3/send

send符合要求的唯一方法是,返回成功完成后發送的字節數,如果失敗則返回-1,這是send永不發送超過SSIZE_MAX個字節的要求。 length參數超過SSIZE_MAXsend必須失敗或返回小於請求的長度。

send()的長度受基礎協議處理消息的能力的限制。 return已簽名以報告錯誤情況,因此負數表示錯誤。 因此,從理論上講它是受限制的,但是還沒有協議可以傳輸SIZE_MAX消息。

send()將嘗試從buf的緩沖區發送SIZE_MAX個字節。 但是, SIZE_MAX基本上表示體系結構的指針類型可以表示的最大值。 因此,它通常至少是整個地址空間的大小,如果不是更大的話。

暫無
暫無

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

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