У меня проблема с одним из моих приложений 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.
РЕДАКТИРОВАТЬ:
Очевидно, что для этой проблемы нет решения, поэтому для разработки япойдет с прокси / инструментом, чтобы обойти это.Спасибо за все предложения, высоко ценится.