Estou tentando usar o comando socat para simular uma desconexão TCP entre meu serviço de cliente e o processo do corretor EMS em um host remoto. Estou executando este comando socat
socat TCP-LISTEN:8123,fork TCP:nome do host remoto:porta
Eu executo este comando em um servidor, digamosservidor1- e estou configurando meu serviço de cliente para conectar-seservidor1:8123- que permite que o cliente se conecte ao corretor EMS real.
No entanto - quando quero simular uma desconexão - estou encerrando o processo socat (encontrei o pid por ps aux | grep socat) - mas isso não parece interromper a conexão - posso ver que o cliente ainda é capaz de conversar com o corretor ems. (por que socat não é morto nesta fase?)
No entanto - se eu reiniciar meu cliente agora, ele falhará na conexão com o corretor (porque agora o processo socat está realmente morto).
Não consigo entender o que está acontecendo aqui - como posso garantir que o processo socat seja definitivamente eliminado?
Responder1
Acho que depende de como você mata o processo socat. Provavelmente o socat não aceita o sinal que você está usando, tente com 9:
kill -9 pid
A saída do ps deve mostrar mais de um pid para o processo socat, você deve escolher o correto.
Logo após executar o comando socat, você deverá ver apenas um processo:
[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
Depois que o cliente estabelecer uma conexão, você deverá ver outro processo:
[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
Agora, se você encerrar o processo com o pid 28801, nenhuma nova conexão será permitida, mas o cliente ainda estará conectado até que você elimine o processo com o pid 28807