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

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

ERROR: could not bind to socket on 0.0.0.0:7700 

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

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

  • Как захватить трафик на виртуальных интерфейсах?
  • TCP SYN, ACK Retransmissions
  • Ошибка: «TCP_NODELAY» не был объявлен в этой области
  • Как записывать сеанс TCP / TLS в societ socat?
  • связанный, но не прослушивающий процесс
  • Эфемерный порт: что это такое и что он делает?
  • nc -l в фоновом закрытии немедленно закрывается (nc -l 1234 &)
  • Повышение производительности TCP по сравнению с гигабитной сетью
  • 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 - лучшая ОС в мире.