Я пытаюсь использовать команду 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