簡體   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