Что определяет максимальный локальный размер дейтаграммы?(PF_UNIX / SOCK_DGRAM) - PullRequest
2 голосов
/ 15 октября 2010

Могут ли локальные сокеты на основе сообщений передавать сообщения до пределов SO_SNDBUF / SO_RCVBUF или где можно определить так называемую «фиксированную максимальную длину» для дескриптора, созданного с помощью socket(PF_UNIX, SOCK_SEQPACKET, 0) или socket(PF_UNIX, SOCK_DGRAM, 0)?

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

из man unix

Параметр сокета SO_SNDBUF влияет на доменные сокеты Unix, а параметр SO_RCVBUF - нет.Для сокетов дейтаграмм значение SO_SNDBUF накладывает верхний предел на размер исходящих грамм данных.Этот предел рассчитывается как значение параметра doubled (см. Socket (7)) за вычетом 32 байтов, используемых для служебных данных.

1 голос
/ 15 октября 2010

Ваши дейтаграммы будут поставлены в очередь в буферах отправки / получения сокетов максимум до SO_SNDBUF и SO_RCVBUF соответственно.Датаграммы будут отброшены выше этого предела.

Обратите внимание, что датаграммы не имеют точного размера данных, которые вы в них помещаете.

Я не помню,но я думаю, что вы можете настроить эти параметры.Однако всегда разумнее использовать собственную буферизацию при работе с сокетами UDP.

edit: извините за это, верно.Это может быть полезно:

Параметр сокета SO_SNDBUF влияет на доменные сокеты Unix, но параметр SO_RCVBUF - нет.Для сокетов дейтаграмм значение SO_SNDBUF накладывает верхний предел на размер исходящих грамм данных.Этот предел рассчитывается как значение параметра doubled (см. Socket (7)) за вычетом 32 байтов, используемых для служебных данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...