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

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

ERROR: could not bind to socket on 0.0.0.0:7700 

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

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

  • Каковы другие алгоритмы управления перегрузками, специально разработанные для беспроводных сетей с потерями, таких как LTE и WiMax?
  • Может ли TCP обеспечить более 65535 портов?
  • IPTables и прозрачные прокси
  • что такое спецификация формата для `ss -D`?
  • Различать TCP-сервер от клиента в выводе netstat
  • Подключение к серверу на локальном хосте с одним и тем же исходным и конечным портами
  • Параметры keep-alive TCP не соблюдаются
  • Что означает TCPRcvCoalesce, TCPAutoCorking и TCPHystartTrainCwnd в netstat?
  • 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? ,

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