netstat показывает открытый порт с pid для процесса, который не существует?

netstat показывает открытый порт с pid для процесса, который не существует?

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

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

решение1

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

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

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

Связанный контент