Имитация отключения TCP с помощью socat

Имитация отключения TCP с помощью socat

Я пытаюсь использовать команду socat для имитации отключения tcp между моей клиентской службой и процессом брокера EMS на удаленном хосте. Я запускаю эту команду socat

socat TCP-LISTEN:8123,fork TCP:имя удаленного хоста:порт

Я запускаю эту команду на сервере, скажемсервер1- и я настраиваю свою клиентскую службу для подключения ксервер1:8123- что позволяет клиенту подключаться к реальному брокеру EMS.

Однако, когда я хочу смоделировать отключение, я завершаю процесс socat (pid я нахожу с помощью ps aux | grep socat), но это, похоже, не завершает соединение, я вижу, что клиент все еще может взаимодействовать с брокером ems. (почему socat не завершается на этом этапе?)

Однако если я сейчас перезапущу свой клиент, то он не сможет подключиться к брокеру (потому что теперь процесс socat действительно мертв).

Я не могу понять, что здесь происходит. Как мне убедиться, что процесс socat определенно завершен?

решение1

Я думаю, это зависит от того, как вы убиваете процесс socat. Вероятно, socat не принимает сигнал, который вы используете, попробуйте с 9:

kill -9 pid

Вывод ps должен отображать более одного pid для процесса socat, вам нужно выбрать правильный.

Сразу после выполнения команды socat вы должны увидеть только один процесс:

[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.

Связанный контент