Как «освободить» TCP-порт?

У меня есть код, который прослушивает определенный TCP-порт. Однако, когда я останавливаю этот код и быстро его перезапускаю, я вижу ошибку

ERROR: could not bind to socket on 0.0.0.0:7700 

Если я подожду минуту или около того, внезапно этот порт «свободен», и код снова запустится.

Мой вопрос: есть ли способ заставить этот порт «бесплатно»? Чтобы сразу запустить мой код, не дожидаясь минуты или около того?

  • Память ussage для буферов сообщений TCP или именованных каналов?
  • Исключить интерфейс обратной связи или адрес из процессов, прослушивающих «любой» адрес
  • что такое спецификация формата для `ss -D`?
  • Как узнать, сколько повторных передач TCP происходит?
  • Аутентификация и авторизация D-Bus
  • Поля tcp_probe
  • Почему TCP-соединения IPv4 отображаются как tcp6?
  • почта php не работает на сервере rhel?
  • One Solution collect form web for “Как «освободить» TCP-порт?”

    Вы можете использовать SO_REUSEADDR

     int optval = 1; /* create socket using socket */ setsockopt(s1, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval); /* bind socket */ 

    Вы получаете эту ошибку, поскольку протокол TCP заставляет сервер помещать сокет, который вы только что закрыли, в статус TIME_WAIT течение времени, определенного в net.ipv4.tcp_fin_timeout . Это делается для того, чтобы действительно каждый пакет, который другой одноранговый узел мог послать после того, как ваш сервер закрыл сокет, все еще обрабатывается правильно.

    Вот хорошее описание этой проблемы в верхнем ответе потока: В чем смысл SO_REUSEADDR (опция setsockopt) – Linux? ,

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.