UDP Socket записывает просроченные пакеты при повторном подключении Ethe rnet. Как мне сделать sh буфер записи из сокета, когда Ethe rnet отключен? - PullRequest
1 голос
/ 11 февраля 2020

У меня есть «Поток передачи», который управляет сокетом (#include WinSock2.h) для передачи всех данных UDP, необходимых моему приложению. Приложение является приложением c ++ Windows, работающим на Windows 10. Я отправляю до 5 или около того пакетов в секунду на широковещательный адрес su bnet, каждый пакет менее 200 байтов.

проблема в том, что когда я отключаю Ethe rnet, в буфере записи сокета, похоже, есть некоторые не отправленные данные, которые я не смог вывести sh.

Когда мое приложение обнаруживает потерю rnet, я закрываю (closesocket) и снова открываю сокет. Сразу после повторного подключения сокет отправляет несколько старых сообщений, которые были «отправлены», когда Ethe rnet был отключен.

Я думаю, что эта проблема находится за пределами моего приложения. Я отключил ethe rnet во время работы приложения, а затем закрыл приложение. Сразу после повторного подключения я вижу, что некоторые сообщения передаются, несмотря на то, что приложение больше не работает.

Вещи, которые я пытался (без удачи):

Я пытался вызвать shutdown( m_sock, SD_BOTH ); непосредственно перед closesocket( m_sock );

Я пытался записать буфер, полный нулей, в сокет непосредственно перед закрытием

Я не могу установить параметр SO_DONTLINGER, потому что мой сокет SOCK_DGRAM

Когда я пытаюсь WSAIoctl( m_sock, SIO_FLUSH, NULL, 0, NULL, 0, &dwBytesRead, &wsol, NULL ), он возвращает ошибку 997 (WSA_IO_PENDING)

Я не знаю, как остановить ожидание ввода-вывода.

Ни WSASendDisconnect( m_sock, NULL ), ни CancelIo( (HANDLE)m_sock ) не работают, и ни один не сигнализирует об ошибке

1 Ответ

0 голосов
/ 14 апреля 2020

Насколько я могу судить, проблема была не в моем программном обеспечении или локальном NI C. Мой NI C был подключен к концентратору Ethe rnet до подключения к другим устройствам в моей локальной сети через коммутатор.

Наличие концентратора вызвало описанное поведение. Без концентратора я не испытываю ни "гриппа sh", ни отправки просроченных пакетов.

...