recvfax из максимального буфера TCP / IP - PullRequest
1 голос
/ 21 февраля 2010

Я пишу небольшую C-программу для понимания сокетов. Какова максимальная длина данных, возвращаемых из recvfrom?

recvfrom (raw, packet_buffer, buf_size, ...);

каков максимальный размер buf_size в linux. Есть ли константа, связанная с этим size_t?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Это на самом деле не прямой ответ ... несколько косо на вопрос. Для TCP / IP, даже если вы определите, какой максимальный размер в вашей системе, было бы лучше реализовать код, чтобы не полагаться на него. При использовании потоковых сокетов лишние данные не теряются. Таким образом, вы можете снова вызвать функцию получения, чтобы получить оставшиеся данные. Однако это не так для соединений, ориентированных на сообщения (UDP).

0 голосов
/ 21 февраля 2010

Я думаю, что макс составляет 65535 байт. Он не зависит от MTU, так как он обрабатывается стеком протоколов сам по себе ... так что в основном у вас есть хорошая абстракция для получения эффективных пакетов, которые отправляются по сети.

Выбор 2 ^ 16 должен быть таким, потому что это максимальный размер окна TCP (обычно это не 64 КБ, но меньше): так что это максимальный буфер, который протокол допускает для TCP-соединения.

...