每当我的程序到达一个write()函数时,我都会收到此错误。该程序将再次继续,但将在下一次write()调用时停止。当我在 gdb 之外运行该程序时,它运行正常。
Program received signal SIGPIPE, Broken pipe.
0x00007ffff794b340 in __write_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
有人告诉我,当从远程端关闭套接字时会发生这种情况,但这是如何发生的。
注意:服务器和客户端都在同一台计算机上运行,并且服务器是为我预先构建的,因此我无权访问它的代码。
SIGPIPE当对方关闭连接时生成。它的存在有充分的理由。
默认情况下 gdb 捕获SIGPIPE.
如果您不感兴趣(而且很可能不感兴趣),只需将其禁用即可:
handle SIGPIPE nostop noprint pass
Run Code Online (Sandbox Code Playgroud)
有人告诉我,当从远程端关闭套接字时会发生这种情况,但这是如何发生的。
你是说为什么?由于你没有来源,我们只能猜测。
也许它已经发送了它想要的所有数据并关闭了连接,因为保持它打开是没有意义的......记住,连接可以是半关闭的(即,从一侧)。服务器不想再读了,只是等你读完数据然后关闭你这边。可能没有出现任何问题 - 但您必须自己决定,因为只有您知道应用程序协议是什么。
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |