Linux отменяет выделение сокета?

Linux отменяет выделение сокета?

Я пишу сетевое приложение и столкнулся с небольшой неприятностью. Мне приходится ждать некоторое время между тестами, потому что моя серверная программа даже после закрытия все еще имеет порт, который я использую, "выделенным" ей. Более того, это сильно затрудняет отладку, поскольку я не могу сказать, что вызывает ту проблему, с которой я имею дело.

Есть ли способ освободить порты TCP и UDP в целях тестирования?

решение1

В вашей программе Python вам нужно вызвать функции shutdown и close для сокета, чтобы дать знать ОС, что ваша программа больше не использует его, и она освободит сокет, если после вызова этих функций его никто не использует. Если вы не вызовете эти функции при выходе из программы, вам придется ждать, пока ОС очистит устаревшие выделенные сокеты. Даже если вы принудительно завершите приложение, так как ОС все равно не сможет явно узнать, что оно не используется. Поэтому, когда программа завершается и не закрывает сокет должным образом, ОС будет сохранять его выделенным в течение некоторого времени, пока не выполнит проверку, действительно ли он используется, и если нет, то освободит его для использования другими программами.

Вот ссылка, которая объяснит функции выключения и закрытия сокетов в Python. ТАК ОТВЕТИТЬ

Связанный контент