每次我的程序达到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.
我被告知当套接字从远端关闭时会发生这种情况,但是会发生什么呢。
注意:服务器和客户端都在同一台机器上运行,并且服务器是为我预先构建的,因此我无法访问它的代码。
答案 0 :(得分:3)
SIGPIPE
。它存在good reasons。
默认情况下,gdb捕获SIGPIPE
。
如果您不感兴趣,而且很可能不会,只需将其停用:
handle SIGPIPE nostop noprint pass
我被告知当套接字从远端关闭时会发生这种情况,但是会怎么样。
你的意思是为什么?由于你没有源,我们只能猜测。
也许它已经发送了它想要的所有数据并关闭了连接,因为没有必要让它保持打开...记住,连接可以是half-closed(即从一边)。服务器不想再读取任何内容,只是等待您阅读数据并关闭您的身边。可能没有出错 - 但你必须自己决定,因为只有你知道申请协议是什么。