Сокет TcpListener, все еще активный после выходов программы

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

Сокет моется, код по существу:

try
{
    myServer.Server.Shutdown(SocketShutdown.Both)
}
catch (Exception ex)
{
     LogException(ex)
}
myServer.Server.Close(0)
myServer.Stop()

myServer является TCPListener

В некоторых случаях Завершение работы будет выданный исключение

Система. Сеть. Сокеты. SocketException: запрос, чтобы отправить или получить данные был запрещен, потому что сокет не подключен и (при отправке на датаграммном сокете с помощью вызова sendto), никакой адрес не был предоставлен в System. Сеть. Сокеты. Сокет. Завершение работы (SocketShutdown, как)

Отредактируйте 2010 14 мая

После дальнейшего расследования может быть выдано исключение, и сокет может быть закрыт правильно.

Иногда, даже после того, как приложение выходит из шоу netstat, сокет находится все еще в состоянии СЛУШАНИЯ.

Я не смог создать категорический сценарий воспроизведения, это происходит в на вид случайные времена.

Клиентские Сокеты очищены независимо.

У Вас есть какие-либо предложения, чтобы помочь мне заставить этот сокет перестать работать?

12
задан lnical 14 May 2010 в 12:33
поделиться

3 ответа

Попробуйте вызвать Стоп до закрытия...

1
ответ дан 2 December 2019 в 23:42
поделиться

После выхода из приложения сокет не может находиться в состоянии прослушивания. Однако он может находиться в состоянии ожидания; это совершенно нормально.

0
ответ дан 2 December 2019 в 23:42
поделиться

Используйте блок finally для вызова Close () в случае исключения:

try
{
    myServer.Server.Shutdown(SocketShutdown.Both);
}
catch (Exception ex)
{
    LogException(ex);
}
finally
{
    myServer.Server.Close(0);
    myServer.Stop();
}

Мне также любопытно, требуется ли манипулирование базовым сокетом из-за какой-то спецификации, которую вы не упомянули? TCPListener / Client разработаны таким образом, чтобы в большинстве случаев вы не беспокоились об этих механизмах связи.

Кроме того, если это не помогает, какой код ошибки возвращается SocketException?

3
ответ дан 2 December 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: