Voici quelques options :
- Attachez avec gdb et appelez close() sur le fd. Vous pouvez mapper de l'addr/port au numéro d'inode via /proc/net/tcp et du numéro d'inode au FD à l'intérieur du processus avec ls -la /proc/$pid/fd.
- Spoofez un paquet RST. Vous devrez le générer localement et deviner le numéro SEQ d'une manière ou d'une autre.
- Peut-être configurer une règle iptables pour générer un RST sur le prochain paquet.
- Écrire un module de noyau.
Il ne semble pas y avoir de moyen bien supporté de le faire. Il est probable que les processus se bloquent si leurs FD sont de toute façon fermés de manière inattendue.
Vous ne pouvez pas tuer une seule connexion d'un processus.
Mais vous pouvez le bloquer avec iptables. Ainsi, la connexion ne peut pas fournir ou recevoir de données et le client s'exécutera dans un délai d'attente.
Sur le noyau Linux>=4.9, vous pouvez utiliser le ss
commande depuis iproute2 avec la clé -K
ss -K dst client1.something dport = 49987
le noyau doit être compilé avec CONFIG_INET_DIAG_DESTROY
option activée.
Vous pouvez tuer par port de destination :
ss -K dport = 65987