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

Eri*_*gal 2 c gdb

每当我的程序到达一个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)

有人告诉我,当从远程端关闭套接字时会发生这种情况,但这是如何发生的。

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

Kar*_*ath 6

SIGPIPE当对方关闭连接时生成。它的存在有充分的理由。

默认情况下 gdb 捕获SIGPIPE.

如果您不感兴趣(而且很可能不感兴趣),只需将其禁用即可:

handle SIGPIPE nostop noprint pass
Run Code Online (Sandbox Code Playgroud)

有人告诉我,当从远程端关闭套接字时会发生这种情况,但这是如何发生的。

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

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