2

我正在为使用 TCP 套接字的网络程序运行测试。要验证错误修复,我需要在套接字层重现“Broken pipe”错误,但我不知道如何。任何想法?非常感谢。

4

3 回答 3

2

'Broken pipe' 表示您已写入已被对等方关闭的连接。因此,让对等方关闭连接。

于 2013-08-23T20:03:10.907 回答
0

当 shell 检测到它创建的子进程由于 SIGPIPE 信号而退出时,“Broken pipe”错误消息通常来自 shell。因此,您可以通过使用 SIGPIPE 杀死一个孩子(kill -PIPE %1杀死第一个后台命令)来手动导致一个。

SIGPIPE 由内核生成,并在另一端关闭后发送到尝试写入管道或套接字的任何进程。

于 2013-08-23T19:20:40.790 回答
0

我环顾四周,找不到任何记录的程序,所以你去吧。

我在我的 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> 写入失败:管道损坏

于 2017-08-11T16:59:53.423 回答