Por que demora vários minutos para limpar uma porta TCP de escuta após a execução de um programa?

27

Se eu matar um programa que esteja escutando em uma porta TCP, levará vários minutos até que a porta seja recuperada pelo sistema e possa ser usada novamente. Eu vi vários Q / A mencionando esse fenômeno, mas sem uma explicação. Por que isso acontece, por que o sistema não recupera a porta imediatamente? Isso também acontece em outros sistemas, como o Windows ou o Mac?

    
por Petr Pudlák 18.03.2013 / 11:38

1 resposta

25

A ideia por trás disso é garantir que você não receba pacotes direcionados para o programa anterior escutando nessa porta. Esse estado TIME_WAIT é definido em RFC793 como duas vezes a vida útil máxima do segmento.

Eu não sei sobre outros Sistemas Operacionais, mas presumo que todos eles tenham algum tipo de comportamento similar.

Uma solução alternativa para esse problema é definir SO_REUSEADDR no soquete que deve ignorar o estado TIME_WAIT .

    
por 18.03.2013 / 12:29