socat を使用して TCP 切断をシミュレートする

socat を使用して TCP 切断をシミュレートする

私は、クライアントサービスとリモートホスト上のEMSブローカープロセス間のTCP切断をシミュレートするためにsocatコマンドを使用しようとしています。私はこのsocatコマンドを実行しています

socat TCP-LISTEN:8123、fork TCP:リモートホスト名:ポート

このコマンドをサーバー上で実行すると、サーバー1- そして、クライアントサービスを接続するように構成していますサーバー1:8123- これにより、クライアントは実際の EMS ブローカーに接続できるようになります。

ただし、切断をシミュレートしたい場合、socat プロセスを強制終了します (ps aux | grep socat で pid を見つけます)。ただし、接続が終了していないようです。クライアントが引き続き EMS ブローカーと通信できることがわかります。(なぜこの段階で socat が終了しないのですか?)

ただし、クライアントを再起動すると、ブローカーへの接続に失敗します (socat プロセスが実際に停止しているため)。

ここで何が起こっているのかわかりません。socat プロセスが確実に終了していることをどのように確認できますか?

答え1

それは、socat プロセスをどのように終了するかによって異なると思います。おそらく、socat は使用しているシグナルを受け入れないので、9 を試してください。

kill -9 pid

ps の出力には、socat プロセスの複数の pid が表示されるはずなので、正しいものを選択する必要があります。

socat コマンドを実行した直後には、プロセスが 1 つだけ表示されます。

[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

クライアントが接続を確立すると、別のプロセスが表示されます。

[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

ここで、pid 28801 のプロセスを強制終了すると、新しい接続は許可されませんが、pid 28807 のプロセスを強制終了するまでクライアントは接続されたままになります。

関連情報