Почему для очистки прослушивающего TCP-порта после завершения программы требуется несколько минут?

Если я убью программу, которая прослушивает порт TCP, это займет до нескольких минут, пока порт не будет восстановлен системой и не будет использоваться снова. Я видел несколько вопросов, упоминающих это явление, но без объяснений. Почему это происходит, почему система не сразу восстанавливает порт? Это также происходит в других системах, таких как Windows или Mac?

One Solution collect form web for “Почему для очистки прослушивающего TCP-порта после завершения программы требуется несколько минут?”

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

Я не знаю о других операционных системах, но я предполагаю, что все они имеют какое-то подобное поведение.

Обходной путь для этой проблемы – установить SO_REUSEADDR в сокет, который должен игнорировать TIME_WAIT .

  • Эфемерный порт: что это такое и что он делает?
  • Какова семантика получения EADDRINUSE, когда не подключен прослушивающий сокет, но соединения открыты
  • почему у меня так много открытых обработчиков сокетов и записей в Netgrat DGRAM?
  • Как настроить контейнеры Docker для уникальных IP-адресов, которые не являются стандартными?
  • Каковы другие алгоритмы управления перегрузками, специально разработанные для беспроводных сетей с потерями, таких как LTE и WiMax?
  • Не опаснее ли подключаться к сети как root?
  • TCP: один ПК может подключаться к другому порту прослушивания, но не наоборот
  • Почему Linux не использует диапазон портов IANA Ephemeral?
  • Есть ли способ узнать, прослушивает ли процесс прослушивание через порт TCP сообщение?
  • `cat / dev / ttyACM` теряет данные при передаче через netcat
  • nc -l в фоновом закрытии немедленно закрывается (nc -l 1234 &)
  • Linux и Unix - лучшая ОС в мире.