使用socat模拟tcp断开连接

我正尝试使用socat命令来模拟远程主机上我的客户端服务和EMS代理进程之间的tcp断开连接。 我正在运行这个socat命令

socat TCP-LISTEN:8123,fork TCP:远程主机名称:端口

我在服务器上运行这个命令,比如server1 ,而且我正在configuration我的客户端服务来连接到server1:8123 ,这使得客户端能够连接到实际的EMS代理。

然而,当我想模拟断开连接时,我正在杀死socat进程(我通过ps aux | grep socatfind了pid) – 但是这似乎并没有消除连接 – 我可以看到客户端仍然可以与ems经纪人。 (为什么socool在这个阶段没有被杀害?)

但是 – 如果我现在重新启动我的客户端,然后连接到经纪人失败(因为现在socat过程是真的死了)。

我不知道这里发生了什么 – 我怎样才能确保社会进程绝对被杀害?

我认为这取决于你如何杀死socat进程。 可能socat不接受你使用的信号,尝试9:

kill -9 pid 

ps的输出应该显示多于一个pid的socat过程,你必须select正确的一个。

在你执行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 

一旦客户build立了连接,你就会看到另一个过程:

 [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终止进程