Я пытаюсь остановить прослушиватель TCP, когда моя программа выходит. Мне не нужны какие-либо данные, которые в настоящее время активны в сокете или любом из активных клиентских сокетов.
Код очистки сокета по существу:
try
{
myServer.Server.Shutdown(SocketShutdown.Both)
}
catch (Exception ex)
{
LogException(ex)
}
myServer.Server.Close(0)
myServer.Stop()
myServer - это TCPListener
В некоторых случаях Shutdown выдает исключение
System.Net.Sockets.SocketException: Запрос на отправку или получение данных был запрещен, поскольку сокет не подключен и (при отправке по сокету дейтаграммы с помощью вызова sendto) адрес не был отправлен в System.Net.Sockets.Socket.Shutdown(SocketShutdown как)
Изменить 2010-май-14
При дальнейшем исследовании исключение может быть выбрано, и сокет может быть правильно закрыт.
Иногда даже после выхода приложения netstat показывает, что сокет все еще находится в состоянии LISTENING.
Мне не удалось создать окончательный сценарий воспроизведения, это происходит в казалось бы случайное время.
Клиентские сокеты очищаются независимо.
Есть ли у вас какие-либо предложения, чтобы помочь мне согнуть этот сокет?