Simular la desconexión de TCP usando socat

Simular la desconexión de TCP usando socat

Estoy intentando utilizar el comando socat para simular una desconexión TCP entre mi servicio de cliente y el proceso del intermediario EMS en un host remoto. Estoy ejecutando este comando socat

socat TCP-LISTEN:8123,fork TCP:nombre de host remoto:puerto

Ejecuto este comando en un servidor, digoservidor 1- y estoy configurando mi servicio de cliente para conectarmeservidor1:8123- lo que permite al cliente conectarse al agente EMS real.

Sin embargo, cuando quiero simular una desconexión, estoy eliminando el proceso socat (encuentro el pid mediante ps aux | grep socat), pero eso no parece eliminar la conexión. Puedo ver que el cliente aún puede hablar con el corredor de ems. (¿Por qué no se mata a socat en esta etapa?)

Sin embargo, si ahora reinicio mi cliente, no se podrá conectar con el corredor (porque ahora el proceso socat está realmente muerto).

No puedo entender qué está pasando aquí. ¿Cómo puedo asegurarme de que el proceso socat finalice definitivamente?

Respuesta1

Creo que depende de cómo elimines el proceso socat. Probablemente socat no acepta la señal que estás usando, prueba con 9:

kill -9 pid

La salida de ps debería mostrar más de un pid para el proceso socat, debes elegir el correcto.

Inmediatamente después de haber ejecutado el comando socat, debería ver solo un proceso:

[root@centos03 ~]# ps aux | grep socat
root     28801  0.0  0.3  41684  1936 pts/0    S+   15:22   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28803  0.0  0.1 103244   848 pts/3    S+   15:22   0:00 grep socat

Una vez que el cliente haya establecido una conexión, debería ver otro proceso:

[root@centos03 ~]# ps aux | grep socat
root     28801  0.0  0.3  41684  1940 pts/0    S+   15:22   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28807  0.0  0.2  45860  1452 pts/0    S+   15:25   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28809  0.0  0.1 103244   844 pts/3    S+   15:26   0:00 grep socat

Ahora, si finaliza el proceso con el pid 28801, no se permitirá ninguna nueva conexión, pero el cliente seguirá conectado hasta que finalice el proceso con el pid 28807.

información relacionada