Буферизирует ли ОС пакеты для UDP

Для однопоточного сервера у меня есть код ниже. Мне интересно, что произойдет, если я получу пакет (и начну его обработку), а другой пакет прибудет, пока я не слушаю (занята обработка). Будет ли ОС буферизовать пакет и ждать, пока сокет снова прослушивает, или пакет будет отброшен?

            While(true){
                UDPsocket.receive(packetBuff);
                //Do stuff
            }

Примечание. Приложение работает в Linux (Ubuntu 12.04).


person Mike G    schedule 27.11.2012    source источник


Ответы (2)


Операционная система имеет буфер приема, где она может хранить данные, когда ваша программа занята. Вы можете использовать getsockopt() с опцией SO_RCVBUF, чтобы увидеть/изменить размер буфера приема, и SO_SNDBUF для буфера отправки. Обычно существует значение по умолчанию для всей системы, и для него можно установить максимальный размер для всей системы.

Что такое по умолчанию и как это увидеть, зависит от того, какую операционную систему вы используете. По умолчанию обычно находится где-то между 32 КБ и 256 КБ данных, которые он будет буферизовать для вас.

person whamma    schedule 27.11.2012
comment
SO_RCVBUF If — буфер приема, а SO_SNDBUF — буфер отправки. Одно не изменяет другое. - person Trevor Hickey; 12.02.2016

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

person choz    schedule 27.11.2012