с использованием сокета с перекрытой операцией выбрало уведомление о завершении на основе событий; Есть 2 события, один для данных, другой, чтобы отменить длинный посыл/ПРИЕМ:WIN32 Socket API: Отмена отправки/возврата в сокет с использованием уведомления о завершении на основе событий
HANDLE events[] = { m_hDataEvent, m_hInterruptEvent };
затем призывающую WSASend,
WSASend(m_Socket, &DataBuf, 1, NULL, 0, &SendOverlapped, NULL);
следует
WSAWaitForMultipleEvents(2, events, FALSE, INFINITE, FALSE);
, который является установкой для возврата на любом событии. Теперь предположим, что передача выполняется, и сигнализируется m_hInterruptEvent. Возврат WSAWaitForMultipleEvents, технически функция вызова send также может возвращать и удалять встроенные буферы.
Что мне непонятно, WSASend все еще может работать в фоновом режиме, а удаление буферов приведет к повреждению данных в лучшем случае.
Что было бы правильным способом остановить отправку/получение фона, если сокет должен быть немедленно использован для чего-то другого?
Я посмотрел на CancelIO(), но MSDN никогда не упоминает его относительно сокетов, работает ли он только с файловым IO?
То, что вы сказали здесь, имеет смысл, единственная проблема заключается в том, что я ограничен спецификацией протокола и тем фактом, что на сервере разрешено только одно подключение (я работаю на клиенте). Это делает все более сложным, чем должно быть ... Я рассмотрю разбиение больших сообщений на мелкие куски. – Califf