Я пытаюсь остановить Слушателя 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, сокет находится все еще в состоянии СЛУШАНИЯ.
Я не смог создать категорический сценарий воспроизведения, это происходит в на вид случайные времена.
Клиентские Сокеты очищены независимо.
У Вас есть какие-либо предложения, чтобы помочь мне заставить этот сокет перестать работать?
После выхода из приложения сокет не может находиться в состоянии прослушивания. Однако он может находиться в состоянии ожидания; это совершенно нормально.
Используйте блок finally для вызова Close () в случае исключения:
try
{
myServer.Server.Shutdown(SocketShutdown.Both);
}
catch (Exception ex)
{
LogException(ex);
}
finally
{
myServer.Server.Close(0);
myServer.Stop();
}
Мне также любопытно, требуется ли манипулирование базовым сокетом из-за какой-то спецификации, которую вы не упомянули? TCPListener / Client разработаны таким образом, чтобы в большинстве случаев вы не беспокоились об этих механизмах связи.
Кроме того, если это не помогает, какой код ошибки возвращается SocketException?