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

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

ERROR: could not bind to socket on 0.0.0.0:7700 

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

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

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, если он достигнет дескрипторов файлов или ограничений TCP-соединений?
  • Как узнать, какой файл Apache работает, когда порт попал?
  • Являются ли исходные IP-адреса включенными в уникальность уникального порта Linux?
  • Как проверить, открыт ли брандмауэр для порта, но не прослушивается порт
  • Как отключить выгрузку контрольной суммы tcp на OSX 10.11.6?
  • Память ussage для буферов сообщений TCP или именованных каналов?
  • Не опаснее ли подключаться к сети как root?
  • Как настроить configure keepalive на Centos7
  • соединение telnet закрывается
  • Почему я не вижу капель с потоками TCP в linux
  • Почему я не могу определить приоритет трафика TCP с использованием полей ToS?
  • Linux и Unix - лучшая ОС в мире.