Re[2]: Как правильно предупредить WSAENOBUFS при WSASend на IOCP TCP
От: v2 Украина  
Дата: 06.10.13 10:19
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>А насколько я понимаю она не перекладывает себе данные. если ты их разрушишь до того как она пошлет, то будет ошибка.
Как только WSASend завершилась с WSA_IO_PENDING делаю с данными что хочу — проблем не наблюдал (ну что ж, потестирую еще и в этом ключе),
а вот размер невыгружаемой памяти ядра временно увеличивается, что можно объяснить как дублирование (кэширование) моих данных системой

KA>У тебя уже есть IOCP. Тогда делается так, в WSAsend передается не overlapped а твоя структура большего размера в котором только начало overlapped.

Да, так и есть.

KA>Когда wsasend произойдет, ты получишь указатель на свою структуру (он же на overlapped). Исходя из нее, поймешь какие буфера посланы и что можно освобождать.

KA>Очень удобно в одном потоке создаешь буферы и в сенд, в другом получаешь completition и освобождаешь (или складываешь в пустые)
Как раз это таки и не удобно, — зачем накладывать дополнительные ограничения на 'пользователя' или же 'самому' дублировать данные.
Вот м$ные ребята и сказали: нате асинхронную отсылку, а мы там сами уже, нам виднее как. (Ну, это я так думаю, — вроде логично.)

Вопрос открыт, буду рад почитать Ваши мысли.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.