Re[10]: completion port, WSARecv, buflen
От: Aspire  
Дата: 23.02.09 10:15
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>А если ты хочешь сразу пачку WSASend вызвать, не дожидаясь завершения предыдущей отсылки, то это плохая идея. Кто тебе сказал, что данные не перемешаются?


Проверил, действительно все данные в кучу Получается, что при отправке только части данных, я уже в треде коллбэка порта завершения должен вызвать повторно WSASend. Эва кааак... Спасибо, буду писать. Вернее, переписывать

С праздником!
Re[11]: completion port, WSARecv, buflen
От: Aspire  
Дата: 23.02.09 12:51
Оценка:
Здравствуйте, Aspire, Вы писали:

A>Мне нельзя использовать стуктуру с предыдущего раза... и прочий бред


Эксперименты показали следующее.

1. Вызывать WSARecv и WSASend в цикле для одного клиента, действительно нельзя, т.к., все полученные данные перемешиваются в кучу.

2. Если вызывать блокирующий recv в цикле, то макс размер полученных за одни раз данных варьируется хз в зависимости от чего от 3 до 20кб, но это не имеет никакого отношения к той величине, которая будет получена при перекрытом вызове ф-ции WSARecv, с помощью которой, можно получить и 100Мб до того, как на обработчик порта придет сигнал о завершении ввода/вывода. Может, и больше, но я не проверял. Вот она сила!!! Тут уж, не без оснований, можно считать, что в случае WSASend будет тажа ситуация.

Теперь, на отправку я буду крутить цикл для разных клиентов, а то, что не дослалось, хотя это уж вряд-ли (см 2 пункт), буду досылать в коллбэке обработчика порта.

3. Не забывайте перед вызовом WSASend/WSARecv обнулять структуру OVERLAPPED.

Всем спасибо за помощь.
Re[11]: completion port, WSARecv, buflen
От: Aspire  
Дата: 23.02.09 19:11
Оценка:
Хотел точку поставить жирную точку во всем этом беспределе, но, поскольку недавно на этом форуме, то поставил ее не там. Сорри. Исправляюсь.

Здравствуйте, Aspire, Вы писали:

A>Мне нельзя использовать стуктуру с предыдущего раза... и прочий бред


Эксперименты показали следующее.

1. Вызывать WSARecv и WSASend в цикле для одного клиента, действительно нельзя, т.к., все полученные данные перемешиваются в кучу.

2. Если вызывать блокирующий recv в цикле, то макс размер полученных за одни раз данных варьируется хз в зависимости от чего от 3 до 20кб, но это не имеет никакого отношения к той величине, которая будет получена при перекрытом вызове ф-ции WSARecv, с помощью которой, можно получить и 100Мб до того, как на обработчик порта придет сигнал о завершении ввода/вывода. Может, и больше, но я не проверял. Вот она сила!!! Тут уж, не без оснований, можно считать, что в случае WSASend будет тажа ситуация.

Теперь, на отправку я буду крутить цикл для разных клиентов, а то, что не дослалось, хотя это уж вряд-ли (см 2 пункт), буду досылать в коллбэке обработчика порта.

3. Не забывайте перед вызовом WSASend/WSARecv обнулять структуру OVERLAPPED.

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