2010-06-13 3 views
1

Имея приложение для Windows IOCP ............управление Буфером для сокетов применения передовой практики

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

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

До сих пор это хорошо, а не большая проблема.

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

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

+0

Каким образом 'SO_RCVBUF' не помогло? С UDP это головная боль, но с TCP - в чем проблема? Также очередь отправки ортогональна к тому, чтобы сторона получателя была затоплена. –

+0

"ортогональный"? Я ограничен моим английским хе .. Ну, я думал, что «SO_RCVBUF» позволит получить больше данных, чем может принять мое приложение, то есть, если я планирую читать 100 байт в буфер, но отправитель отправил мне 1 МБ, то буфера сокета (который я установил размер с «SO_RCVBUF») будет заполнен. – Poni

+1

Orthogonal = perpendicular :) –

ответ

3

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

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

+0

+1 для использования пула памяти. – young

Смежные вопросы