【发布时间】:2013-08-23 17:54:42
【问题描述】:
我正在对使用 TCP 套接字的网络程序进行测试。为了验证错误修复,我需要在套接字层重现“Broken pipe”错误,但我不知道如何。任何想法?非常感谢。
【问题讨论】:
标签: sockets networking tcp
我正在对使用 TCP 套接字的网络程序进行测试。为了验证错误修复,我需要在套接字层重现“Broken pipe”错误,但我不知道如何。任何想法?非常感谢。
【问题讨论】:
标签: sockets networking tcp
'Broken pipe' 意味着你已经写入了一个已经被对端关闭的连接。因此,让对等方关闭连接。
【讨论】:
“Broken pipe”错误消息通常来自 shell,当它检测到它创建的子进程由于 SIGPIPE 信号而退出时。因此,您可以通过使用 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> 写入失败:管道损坏
【讨论】:
ssh。