Это скорее вопрос дизайна, чем вопрос конкретного кода, я уверен, что упускаю очевидное, мне просто нужен другой набор глаз.
Я пишу многопользовательский сервер на основе WSAAsyncSelect, каждое соединение превращается в объект класса соединения, который я написал, который содержит соответствующие настройки, буферы и т. Д.
Мой вопрос касается FD_WRITE, я понимаю, как он работает: один FD_WRITE отправляется сразу после установления соединения. После этого вы должны отправлять до получения WSAEWOULDBLOCK, после чего вы сохраняете то, что осталось отправить в буфер, и ждете, когда вам сообщат, что отправлять снова можно.
Вот где у меня проблема, насколько большой я могу сделать этот буфер хранения в каждом объекте соединений? Время до получения нового FD_WRITE неизвестно, я мог пытаться отправить много материала в течение этого периода, все время добавляя в мой исходящий буфер. Если я сделаю буфер динамическим, использование памяти может выйти из-под контроля, если по какой-либо причине я не смогу отправить () и уменьшить буфер.
Итак, мой вопрос: как вы обычно справляетесь с этой ситуацией? Заметьте, я не говорю о самом сетевом буфере, который использует winsock, но о моем собственном создании, используемом для «отправки в очередь».
Надеюсь, я объяснил это достаточно хорошо, спасибо всем!