У меня возникла проблема с одним из моих приложений на C++ в Windows 2008x64 (это же приложение отлично работает в Windows 2003x64).
После сбоя или даже иногда после обычного цикла выключения / перезапуска у него возникает проблема с использованием сокета на порту 82, которому необходимо получать команды.
Глядя на netstat, я вижу, что сокет все еще находится в состоянии прослушивания более 10 минут после остановки приложения (процесс определенно больше не работает).
TCP 0.0.0.0:82 LISTENING
Я попытался установить для параметра сокета значение REUSEADDR, но, насколько мне известно, это влияет только на повторное подключение к порту, находящемуся в состоянии TIME_WAIT. В любом случае это изменение не имело никакого значения.
int doReuse = 1;
setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR,
(const char *)&doReuse, sizeof(doReuse));
Любые идеи, что я могу сделать, чтобы решить или, по крайней мере, избежать этой проблемы?
ИЗМЕНИТЬ:
Сделал netstat -an, но это все, что я получаю:
TCP 0.0.0.0:82 0.0.0.0:0 LISTENING
Для netstat -anb я получаю:
TCP 0.0.0.0:82 0.0.0.0:0 LISTENING
[System]
Я знаю о корректном закрытии, но даже если приложение по какой-то причине выйдет из строя, мне все равно нужно иметь возможность перезапустить его. Рассматриваемое приложение использует внутреннюю библиотеку, которая внутренне использует Windows Sockets API.
ИЗМЕНИТЬ:
Судя по всему, решения этой проблемы нет, поэтому для разработки я пойду с прокси/инструментом, чтобы обойти это. Спасибо за все предложения, очень признателен.
netstat -anb
, чтобы узнать, кто слушает на 82. - person Eugen Constantin Dinca   schedule 16.12.2010