У нас есть программа, которая прослушивает порт для получения информации о запуске отчета. После закрытия и повторного открытия программы мы получаем сообщение о том, что используемый ею порт уже используется. Глядя на netstat , мы видим, что есть 9 экземпляров этого порта в состоянии CLOSE_WAIT и 1 экземпляр в состоянии прослушивания. Экземпляр, который находится в состоянии прослушивания, говорит, что он принадлежит pid 488. Диспетчер задач показывает, что процесс с таким идентификатором не существует, а taskkill говорит то же самое. Приложение представляет собой собственное приложение .NET.

Это производственная среда, поэтому мы хотим избежать перезапуска машины. Что может вызвать это и что можно сделать, чтобы это исправить?

1 ответ1

0

CLOSE_WAIT означает, что сокет получил пакет FIN с другого конца и ожидает закрытия приложением, владеющим этим прослушивающим сокетом. Отсутствие вызова close() для прослушивающего сокета может привести к тому, что он будет перемещаться, как это было сделано для вас.

Поскольку это собственное приложение .NET, я бы дважды проверил ваш исходный код, чтобы убедиться, что сокет был закрыт () правильно перед выходом.

Дополнительная информация о состояниях сокетов, включая CLOSE_WAIT:http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .