Quelle est la taille maximale du message de datagramme AF_UNIX pouvant être envoyé sous Linux?
Actuellement, je suis frapper une dure limite de 130688 octets. Si j'essaie de l'envoyer quoi que ce soit plus dans un message, je reçois un ENOBUFS erreur.
J'ai vérifié sur le net.de base.rmem_default, net.de base.wmem_default, net.de base.rmem_max, net.de base.wmem_max, et net.unix.max_dgram_qlen sysctl options et augmentation de tous, mais ils n'ont aucun effet, parce que ces traiter avec le total de la taille de la mémoire tampon pas de la taille du message.
J'ai aussi mis le SO_SNDBUF et SO_RCVBUF options de prise, mais cela a le même problème que ci-dessus. La valeur par défaut socket taille de la mémoire tampon sont fixés sur la base de la _default options de prise de toute façon.
J'ai regardé le source du noyau où ENOBUFS est retourné dans le support de la pile, mais il n'était pas clair pour moi, où il venait. Les seuls endroits qui semblent revenir de cette erreur ont à voir avec ne pas être en mesure d'allouer de la mémoire.
Est la taille max en fait 130688? Si non, peut-on la changer sans avoir à recompiler le noyau?
Merci!
source d'informationauteur Jaime
Vous devez vous connecter pour publier un commentaire.
AF_UNIX SOCK_DATAGRAM/SOCK_SEQPACKET datagrammes besoin de mémoire contiguë. Contigu de mémoire physique est difficile à trouver, et l'allocation échoue, l'exploitation forestière quelque chose de semblable sur le noyau journal:
unix_dgram_sendmsg()
appelssock_alloc_send_skb()
lxr1qui appellesock_alloc_send_pskb()
avecdata_len
= 0 etheader_len
= taille de datagramme lxr2.sock_alloc_send_pskb()
alloueheader_len
de "normal" skbuff espace tampon, etdata_len
de scatter/gather pages lxr3. Donc il semble que les sockets AF_UNIX ne prennent pas en charge scatter/gather sur la version actuelle de Linux.