/etc/init.d/networking restart
Deixe-me elaborar. O TCP (Transmission Control Protocol) foi 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 ele se perder no meio. O TCP garante a confiabilidade enviando de volta os pacotes de confirmação (ACK) para um único ou vários pacotes recebidos do par.
O mesmo ocorre com os sinais de controle, como solicitação / resposta de término. O RFC 793 define o estado TIME-WAIT da seguinte maneira:
TIME-WAIT - representa a espera de tempo suficiente para garantir que o TCP remoto receba o reconhecimento de sua solicitação de encerramento de conexão.
Consulte o seguinte diagrama de estado TCP:
O TCP é um protocolo de comunicação bidirecional; portanto, quando a conexão é estabelecida, não há diferença entre o cliente e o servidor. Além disso, qualquer um pode chamar encerra e ambos os pares precisam concordar em fechar para fechar completamente uma conexão TCP estabelecida.
Vamos chamar o primeiro a chamar as quits como o ativo mais próximo e o outro o passivo mais próximo. Quando o ativo mais próximo envia FIN, o estado passa para FIN-WAIT-1. Em seguida, ele recebe um ACK para o FIN enviado e o estado passa para FIN-WAIT-2. Depois de receber o FIN também do passivo mais próximo, o ativo mais próximo envia o ACK ao FIN e o estado passa para TIME-WAIT. Caso o passivo mais próximo não tenha recebido o ACK do segundo FIN, ele retransmitirá o pacote FIN.
O RFC 793 define o TEMPO LIMITE para ser o dobro da Vida útil máxima do segmento, ou 2MSL. Como o MSL, o tempo máximo que um pacote pode percorrer na Internet é definido para 2 minutos, 2MSL é de 4 minutos. Como não há ACK para um ACK, o ativo mais próximo não pode fazer nada além de esperar 4 minutos se aderir corretamente ao protocolo TCP / IP, apenas no caso de o remetente passivo não ter recebido o ACK em sua FIN (teoricamente) .
Na realidade, os pacotes ausentes são provavelmente raros e muito raros se tudo estiver acontecendo dentro da LAN ou dentro de uma única máquina.
Para responder à pergunta na íntegra, Como forçosamente fechar um soquete em TIME_WAIT ?, eu ainda ficar com a minha resposta original:
/etc/init.d/networking restart
Na prática, eu o programaria para que ele ignore o estado TIME-WAIT usando a opção SO_REUSEADDR como o WMR mencionado. O que exatamente SO_REUSEADDR faz?
Esta opção de soquete informa ao kernel que, mesmo que essa porta esteja ocupada (no
estado TIME_WAIT), vá em frente e reutilize-a assim mesmo. Se estiver ocupado, mas com outro estado, você ainda receberá um erro de endereço já em uso. É útil se o servidor tiver sido desligado e reiniciado imediatamente enquanto os soquetes ainda estiverem ativos em sua porta. Você deve estar ciente de que, se houver dados inesperados, isso poderá confundir seu servidor, mas, embora isso seja possível, não é provável.
TIME_WAIT
servidores" , basta pular as três primeiras respostas que evitam a pergunta em vez de respondê-la.