繁体   English   中英

为什么GDB在写入网络时会中断?

[英]Why does GDB break when writing to the network?

每次我的程序到达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.

我被告知,当套接字从远端关闭时会发生这种情况,但是会发生什么。

注意:服务器和客户端都在同一台机器上运行,并且服务器是为我预先构建的,因此我无法访问它的代码。

当另一方关闭连接时生成SIGPIPE 它存在的原因充分

默认情况下,gdb捕获SIGPIPE

如果您不感兴趣,并且有可能不这样做,只需禁用它:

handle SIGPIPE nostop noprint pass

我被告知,当套接字从远端关闭时会发生这种情况,但是会发生什么。

你是说为什么? 由于你没有源,我们只能猜测。

也许它已经发送了它想要的所有数据并关闭了连接,因为没有必要保持打开...记住,连接可以半封闭 (即从一侧)。 服务器不想再读取任何内容,只是等待您阅读数据并关闭您的身边。 可能没有出错 - 但你必须自己决定,因为只有你知道应用程序协议是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM