Какое максимальное количество соединений может принимать и удерживать IOCP? - PullRequest
0 голосов
/ 22 марта 2011

Я провожу тестирование IOCP-сервера и клиента. Сервер IOCP принимает подключения клиентов и ничего не делает, кроме получения пакетов данных от клиентов. Клиенты подключаются к серверу и отправляют пакеты данных на сервер в бесконечном цикле.

Я установил счетчик. Он увеличивается, когда сервер принимает клиента, и уменьшается, когда сокет закрыт.

Вот вопрос: Счетчик увеличивается до 32261 и больше не увеличивается. Сервер не может принять больше подключений, GetLastError () возвращает 10055, WSAENOBUF.

Моя ОС - Windows XP, память - 4 ГБ. И я проверил не выгружаемую память. Я думаю, что моей памяти достаточно.

Что ограничивает максимум подключений? Как я могу увеличить максимальное количество подключений?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Трудно сказать, что является причиной вашей проблемы, не видя ваш код. Вряд ли это будет исчерпание пула без постраничной памяти; Я провел тесты на Windows Server 2003 с оперативной памятью всего 760 МБ и достиг более 70 000 одновременных подключений к серверу на базе IOCP (см. здесь ). Это может быть предел блокировки страницы ввода / вывода (см. здесь ); но это зависит от того, что делает ваш сервер после того, как он принял подключения, публикует ли он чтение, и если да, то какой размер буфера? Насколько я знаю, ОБА исчерпан пейджинг невыгружаемого пула И предел блокировки страницы ввода / вывода даст WSAENOBUF ошибок.

Вы пробовали свои тесты на более современной ОС и / или серверном классе? В Vista и более поздних версиях доступно гораздо больше пейджинга без пейджинга (см. здесь ) ...

0 голосов
/ 23 марта 2011

Достигнуто ограничение на объем неиспользуемой памяти.Используете ли вы Push Framework для тестирования с IOCP?

...