Сокет считается закрытым, когда программа, использующая его, умирает. Это многое обрабатывается ОС, и ОС откажется принимать любое дальнейшее сообщение из мертвого разговора. Однако, если сокет был неожиданно закрыт, компьютер на другом конце может не знать, что разговор окончен, и все еще может пытаться установить связь.
Именно поэтому в спецификации TCP предусмотрен период ожидания до повторного использования того же номера порта. Поскольку теоретически, однако маловероятно, возможно, что пакет из старого диалога может прибыть с соответствующим IP-адресом, номерами портов и порядковыми номерами, так что принимающий сервер по ошибке ошибочно вставит его в неправильный поток TCP.
Параметр SO_REUSEADDR
отменяет это поведение, позволяя вам немедленно повторно использовать порт. По сути, вы говорите: «Я понимаю риски и все равно хотел бы использовать порт».