У меня проблема с C++-службой, которая использует порт 30015. Он работает нормально, но когда-то он не запускается, поскольку порт 30015 занят и сбой связи с ошибкой WSAEADDRINUSE.Порт остается занятым, даже если приложение выключено.
Я побежал NETSTAT команду, чтобы узнать состояние порта
netstat -aon | findstr 30015
Выход:
TCP 0.0.0.0:30015 0.0.0.0 сЛушАНИЕ 6740
Я проверил PID 6740 в диспетчере задач, этот PID не принимается процессом.
После поиска в сети я использовал TCPVIEW для просмотра состояния порта. TCPView показывает порт в режиме прослушивания, а имя процесса - «не существует».
Приложение в основном сжимает, распаковывает файл с помощью 7za. Приложение прослушивает порт 30015 для запроса и создает дочерний процесс и передает командную строку для запуска команды 7za для сжатия и распаковки файла.
Здесь дочерний процесс не использует сокет. Сервер работает в основном потоке и прослушивает порт 30015. Эта проблема возникает после перезагрузки сервера.
Здесь дочерний процесс не использует сокет как таковой. Мне нужно сделать bInheritHandle = FALSE?
Да, это true.I перекрестно проверено с использованием утилиты TCPVIEW.Там он показывает имя процесса как несуществование, и он занимал порт. Я хотел знать, что делать, если я делаю bInheritHandles = FALSE. Будет ли это ограничение доступа дочернего процесса к сокету. –
Я создаю дочерний процесс для выполнения 7za (сжимать/распаковывать). Процесс command.child не использует сокет или порт. Даже если дочерний процесс не использует сокет/порт как таковой, выполните bInheritHandles = TRUE заставляет дочерний процесс занять сокет/порт –