/etc/init.d/networking restart
Deixe-me elaborar. O Protocolo de Controle de Transmissão (TCP) é projetado para ser um protocolo de transmissão de dados bidirecional, ordenado e confiável entre dois pontos finais (programas). Nesse contexto, o termo confiável significa que ele retransmitirá os pacotes se for perdido no meio. O TCP garante a confiabilidade enviando de volta pacotes de Confirmação (ACK) para um único ou um intervalo de pacotes recebidos do par.
Isso vale para os sinais de controle, como solicitação / resposta de término. O RFC 793 define o estado TIME-WAIT como segue:
TIME-WAIT - represents waiting for enough time to pass to be sure the remote TCP received the acknowledgment of its connection termination request.
Veja o seguinte diagrama de estado do TCP:
TCPéumprotocolodecomunicaçãobidirecional,portanto,quandoaconexãoéestabelecida,nãohádiferençaentreoclienteeoservidor.Alémdisso,qualquerumpodeencerrar,eambososparesprecisamconcordaremfecharparafecharcompletamenteumaconexãoTCPestabelecida.
Vamoschamaroprimeiroparachamaroquitscomooativomaispróximo,eooutro,opassivomaispróximo.QuandoofechamentomaisativoenviaFIN,oestadovaiparaFIN-WAIT-1.EntãorecebeumACKparaoFINenviadoeoestadovaiparaFIN-WAIT-2.UmavezquerecebeFINtambémdopassivomaispróximo,oativomaispróximoenviaoACKparaoFINeoestadovaiparaTIME-WAIT.CasooclosepassivonãotenharecebidooACKparaosegundoFIN,eleretransmitiráopacoteFIN.
Na realidade, os pacotes ausentes são provavelmente raros e muito raros se tudo estiver acontecendo dentro da LAN ou em uma única máquina.
Para responder a pergunta na íntegra, Como forçar fechar um soquete em TIME_WAIT ?, ainda vou me ater à minha resposta original:
/etc/init.d/networking restart
Praticamente falando, eu o programaria de modo a ignorar o estado TIME-WAIT usando a opção SO_REUSEADDR como o WMR mencionou. O que exatamente o SO_REUSEADDR faz?
This socket option tells the kernel that even if this port is busy (in
the TIME_WAIT state), go ahead and reuse it anyway. If it is busy, but with another state, you will still get an address already in use error. It is useful if your server has been shut down, and then restarted right away while sockets are still active on its port. You should be aware that if any unexpected data comes in, it may confuse your server, but while this is possible, it is not likely.