Windows XP имеет буфер сокетов по умолчанию 8 КБ, Vista и более поздние имеют буфер сокетов по умолчанию 64 КБ. Вы можете переопределить это с помощью SO_RCVBUF
, рекомендуется никогда не устанавливать значение 0 в отличие от SO_SNDBUF
для нулевого копирования при использовании IOCP.
Обычно с буферами сокетов очередь заполняется и начинает отбрасывать новые пакеты, так что с большим буфером вы можете получить устаревшие устаревшие сообщения, ожидающие в буфере и имеющие приоритет над новыми свежими данными.
Конструкция, которой вы должны следовать, - это высокоприоритетный поток в узком цикле, который читает пакеты из сети как можно быстрее и вставляет их в большую очередь приложений для последующей обработки, если ваша бизнес-логика медленнее. При использовании IOCP вы можете опубликовать несколько блокирующих вызовов recv
, чтобы минимизировать потерю данных, но, как указано в документации MSDN, нет никакой гарантии в отношении порядка выполнения на порту завершения.