Simule a desconexão do TCP usando socat

Simule a desconexão do TCP usando socat

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

informação relacionada