我正在为使用 TCP 套接字的网络程序运行测试。要验证错误修复,我需要在套接字层重现“Broken pipe”错误,但我不知道如何。任何想法?非常感谢。
3 回答
'Broken pipe' 表示您已写入已被对等方关闭的连接。因此,让对等方关闭连接。
当 shell 检测到它创建的子进程由于 SIGPIPE 信号而退出时,“Broken pipe”错误消息通常来自 shell。因此,您可以通过使用 SIGPIPE 杀死一个孩子(kill -PIPE %1
杀死第一个后台命令)来手动导致一个。
SIGPIPE 由内核生成,并在另一端关闭后发送到尝试写入管道或套接字的任何进程。
我环顾四周,找不到任何记录的程序,所以你去吧。
我在我的 ssh 配置中发现了一个使用“nc”代理命令的服务器。
主机服务器
代理命令 /usr/bin/nc -4 -n -X 5 -x 127.0.0.1:55555 %h %p
我运行了一个将 ServerAlive 选项设置为 1 的 ssh:
> ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 e3prosup@server
然后在另一个会话中,我找到了与 ssh 关联的“nc”进程并将其杀死。kill -9 (SIGKILL) 或 kill -13 (SIGPIPE) 都可以。
> ps -efa
e3prosup 19502 10955 0 11:43 pts/6 00:00:00 ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 e3prosup@server
e3prosup 19503 19502 0 11:43 pts/6 00:00:00 /usr/bin/nc -4 -n -X 5 -x 127.0.0.1:55555 服务器 22
> 杀-13 19503
现在 ssh 会话得到:
e3prosup@server> 写入失败:管道损坏