2010-02-21 5 views
1

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

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

Максимальное значение buf_size в Linux. Есть ли константа, связанная с этим size_t?

Благодаря

+0

Почему бы не посмотреть в исходный код ядра? Вам может потребоваться погонять, чтобы найти его, но ответ там где-то. –

ответ

1

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

0

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

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

+0

Нет, это намного больше, и функция от того, сколько памяти имеет система, по умолчанию. В большинстве систем в эти дни это несколько мегабайт. –