Управление буфером для наилучшей практики применения сокетов - PullRequest
1 голос
/ 13 июня 2010

Наличие приложения Windows IOCP ............

Я понимаю, что для асинхронной операции ввода-вывода (в сети) буфер должен оставаться действительным в течение всей операции отправки / чтения.

Так что для каждого соединения у меня есть один буфер для чтения.
Для отправки я использую буферы, в которые копирую данные для отправки. Когда операция отправки завершается, я освобождаю буфер, чтобы его можно было использовать повторно.

Пока это хорошо и не имеет большого значения.

Что остается неясным, это как вы, ребята, делаете это?

Другое дело, что даже при таких вещах, я имею в виду мультибуферы, сторона получателя может быть залита данными (исходя из опыта).
Даже установка SO_RCVBUF на 25 МБ не помогла в моих тестах.
И что же мне делать? Есть очередь для отправки?

1 Ответ

3 голосов
/ 19 июля 2010

Я считаю количество структур на соединение (сокет) и на операцию (буфер).Это работает очень хорошо и прекрасно справляется с проблемами жизни.Каждый раз, когда публикуется перекрывающаяся операция, счетчик ссылок для каждого соединения увеличивается, и из пула выделяется новый буфер.Когда операция завершается, я обрабатываю результаты и освобождаю ссылку на сокет и буфер.Если это последняя ссылка, то структура очищается (буферы возвращаются в пул и т. Д.).

Вы можете увидеть все это в действии в моей бесплатной платформе клиент / сервер IOCP, которая доступна для загрузки.от здесь .

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