1

Моя программа привязывает порт для прослушивания, после его завершения порт недоступен в течение минуты, и любая попытка открыть тот же порт снова для прослушивания потерпит неудачу в этот период времени. Мне нужно немного подождать, чтобы снова открыть порт.

Мне нужно будет повторно привязывать порт, потому что мне нужно повторно тестировать свою серверную программу несколько раз. Существуют ли какие-либо команды linux, которые могут преждевременно освободить порт, или какой-либо программный код, который делает то же самое? Я кодирую на C++ и использую инфраструктуру gSOAP.

В основном я буду связывать порт с помощью

soap_bind(&newsoap, NULL, 13518, 100);

который я привязываю к серверу для прослушивания через порт 13518 .

Версия Ubuntu: 11.10

Я попробовал тот же код в Windows, и порт сразу же доступен после завершения программы. Нужно ли мне делать какие-то дополнительные шаги в linux, чтобы отвязать порт до его завершения?

2 ответа2

2

Вам нужно связать с опцией сокета SO_REUSEADDR, чтобы последующее связывание было успешным. В твоем случае:

newsoap.bind_flags |= SO_REUSEADDR;
soap_bind(&newsoap, NULL, 13518, 100);
0

Вы должны закрыть сокет. Это функция безопасности, что открытый порт будет заблокирован ядром на некоторое время.

Я не знаю вашу структуру, вы должны посмотреть в ее документации, как закрыть порт с ним. Я использовал только прямые вызовы ядра для использования портов.

Вы можете прочитать страницы руководства socket bind listen и еще некоторые из страниц ссылаются на самом деле понять , как это работает.

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