簡體   English   中英

AF_UNIX套接字中的最大緩沖區長度

[英]Maximum length of buffer in AF_UNIX socket

我想知道:當使用套接字(AF_UNIX)在C編程時,在發送或接收套接字時是否有任何限制(以字節為單位)?

您可以使用setsockoptSO_SNDBUFSO_RCVBUF )更改每個插槽連接的讀寫緩沖區。

默認大小和最大大小取決於平台。

此外,如果您為每個單獨的讀取提供更大的用戶端緩沖區,例如使用recv

如果你按順序使用幾個recv ,你可以通過連接讀取無限量的字節,它只需要無限長。

套接字行為是依賴於實現的。 通常,當您發送()時,無法保證將多少字節推送到套接字上。 由於內核控制它,它可以是任何數字,通常在1500或更小的范圍內。 因此,您需要做的是檢查send()返回代碼並繼續將數據推送到套接字上,直到完成為止。 此示例假定您已使用以下命令將套接字設置為非阻塞:

 fcntl(s, F_SETFL, O_NONBLOCK);


int sendall(int s, char *buf, int *len)
{
        int total = 0;        /* how many bytes we've sent */
        int bytesleft = *len; /* how many we have left to send */
        int n=0;
        int retries=0;
        struct timespec tp={0,500};

        while(total < *len) 
        {
                n = send(s, buf+total, bytesleft, 0);
                if (n == -1)
                {
                   /* handle errors here, 
                      plus check for EWOULDBLOCK 
                      and then nanosleep()
                   */
                }
                total += n;
                bytesleft -= n;
        }

要回答您的問題 - 沒有限制,您只能通過一次send()調用發送所有數據。

暫無
暫無

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

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