Originalmente de: link
Para "matar" um socket, você deve enviar um pacote de reset TCP. Para enviá-lo (e ser aceito pelo outro lado), você deve saber o número real da seqüência TCP.
1) O já mencionado método tcpkill
aprende o número SEQ passivamente, farejando a rede e esperando que pacotes válidos desta conexão cheguem. Em seguida, ele usa o número SEQ aprendido para enviar pacotes RSET para ambos os lados. No entanto, se a conexão estiver inativa / interrompida e não houver fluxo de dados, ela não fará nada e esperará para sempre.
2) Outro método usa o script perl chamado killcx
( link para o Sourceforge ). Isso envia ativamente pacotes SYN falsificados e aprende o número SEQ da resposta. Em seguida, ele envia pacotes RSET da mesma maneira que tcpkill
.
Alternativamente, a abordagem (com base no que você deseja alcançar) é usar o depurador gdb
para anexar a um processo que possui este soquete / conexão e emitir close()
syscall em seu nome - conforme detalhado neste answer .
Se você quiser lidar apenas com conexões suspensas (o outro lado está morto), existem vários timeouts (manutenção de atividade do TCP, por exemplo), que devem fechar automaticamente essas conexões se configuradas corretamente no sistema.