Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Я думаю, это зависит от того, как убить процесс 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