[英]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_MAX
, send
必須失敗或返回小於請求的長度。
send()的長度受基礎協議處理消息的能力的限制。 return已簽名以報告錯誤情況,因此負數表示錯誤。 因此,從理論上講它是受限制的,但是還沒有協議可以傳輸SIZE_MAX消息。
send()
將嘗試從buf
的緩沖區發送SIZE_MAX
個字節。 但是, SIZE_MAX
基本上表示體系結構的指針類型可以表示的最大值。 因此,它通常至少是整個地址空間的大小,如果不是更大的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.