socat을 사용하여 TCP 연결 끊김 시뮬레이션

socat을 사용하여 TCP 연결 끊김 시뮬레이션

socat 명령을 사용하여 클라이언트 서비스와 원격 호스트의 EMS 브로커 프로세스 간의 TCP 연결 끊김을 시뮬레이션하려고 합니다. 이 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 명령을 실행한 직후에는 하나의 프로세스만 표시됩니다.

[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로 프로세스를 종료할 때까지 클라이언트는 계속 연결됩니다.

관련 정보