搜尋

Linux SIGPIPE訊號

Feb 19, 2024 pm 04:00 PM
tcp頻道sigpipe

在 TCP 通訊雙方中,為了描述方便,以下將通訊雙方以 A 和 B 取代。

根據TCP協定規定,如果A關閉連線後B繼續發送數據,B會收到A的RST回應。若B繼續發送數據,系統會發出SIGPIPE訊號告知連接已斷開,停止發送。

系統對 SIGPIPE 訊號的預設處理行為是讓 B 進程退出。

作業系統對 SIGPIPE 訊號的這種預設處理行為非常不友好,讓我們來分析一下。

Linux SIGPIPE信号

#TCP通訊是全雙工頻道,相當於兩條單工頻道,連接兩端各負責一條。

當對端「關閉」時, 雖然本意是關閉整個兩個頻道,但本端只是收到 FIN 包。

根據TCP協定的規定,當一端關閉其負責的單向通道時,仍可接收資料但不再發送資料。

也就是說,因為 TCP 協定的限制,通訊一方無法獲知對端的 socket 是呼叫了 close 還是 shutdown。

int shutdown(int socket, int how);

shutdown 函數的參數 how 可設定為關閉 SHUT_RD、SHUT_WR 或 SHUT_RDWR 用於表示關閉收、發送單一通道或同時關閉收發通道。

對一個已經收到 FIN 套件的 socket 呼叫 read/recv 方法, 如果接收緩衝已空,則傳回 0,這就是常說的表示連線關閉。但第一次對其呼叫 write/send 方法時,如果發送緩衝沒問題,會傳回正確寫入(即 write/send 函數傳回值大於 0),但發送的封包會導致對端回應 RST 封包。因為上一次程式呼叫 write/send 是正常的,再次嘗試呼叫 write/send 函數時因產生 SIGPIPE 訊號導致進程退出。

這種預設行為對於我們開發程序,尤其是對於後端服務,需要同時對許多客戶端服務,不能因為與某一個客戶端的連接出問題了而導致整個進程退出不能繼續為其他客戶端服務。

為了避免這種現像出現, 可以捕獲 SIGPIPE 訊號並對其進行處理或忽略該訊號, 忽略該訊號代碼如下:

signal(SIGPIPE, SIG_IGN);

這樣設定後,第二次呼叫 write/send 方法時,會回傳 -1,同時 errno 錯誤碼被置為 SIGPIPE,程式便能知道對端已經關閉。

以上是Linux SIGPIPE訊號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:每日运维。如有侵權,請聯絡admin@php.cn刪除
突襲恢復和硬盤恢復之間的區別突襲恢復和硬盤恢復之間的區別Apr 17, 2025 am 12:50 AM

數據恢復始終是一個加熱的話題。要成功地從設備恢復數據,您應該知道它如何存儲數據。您可以從此PHP.CN帖子中學習RAID恢復和硬盤恢復之間的區別。

Microsoft Word刪除文本Windows 10/11?立即修復!Microsoft Word刪除文本Windows 10/11?立即修復!Apr 17, 2025 am 12:48 AM

您會在打字時遇到單詞文字消失嗎?一些字母甚至段落可能會從您的文檔中消失。怎麼了?在PHP.CN網站的這篇文章中,我們將仔細研究自動刪除文本問題的單詞

如何在《守望先鋒2》上修復LC-208錯誤代碼?這是指南! -  Minitool如何在《守望先鋒2》上修復LC-208錯誤代碼?這是指南! - MinitoolApr 17, 2025 am 12:47 AM

當您嘗試登錄《守望先鋒》 2時,您可能會收到LC-208錯誤消息,並防止您的遊戲連接到遊戲服務器。來自PHP.CN的這篇文章介紹瞭如何修復LC-208守望先鋒錯誤。

Google Drive從File Explorer中消失了 - 輕鬆批准Google Drive從File Explorer中消失了 - 輕鬆批准Apr 17, 2025 am 12:46 AM

通常,您可以從文件資源管理器快速訪問和編輯Google Drive文件。但是,有時您可能會遇到“ Google Drive從File Explorer中消失”的問題。在這裡,php.cn上的這篇文章告訴您如何讓Google Drive顯示我

如何修復Windows 7歡迎屏幕慢?提示在這裡!如何修復Windows 7歡迎屏幕慢?提示在這裡!Apr 17, 2025 am 12:45 AM

為什麼我的計算機在歡迎屏幕上這麼長時間?如何修復Windows 7歡迎屏幕慢?如果您仍然在PC上運行Windows 7並遇到此問題,則您在正確的位置,並且將由PHP.CN提供多個解決方案。

如何在Windows 11中打開憑據管理器?您的6種方法! -  Minitool如何在Windows 11中打開憑據管理器?您的6種方法! - MinitoolApr 17, 2025 am 12:44 AM

是否要使用內置密碼管理工具 - 憑據管理器來管理Web和應用程序的登錄憑據?如何在Windows 11中打開憑據管理器?在這篇文章中,PHP.CN收集了多種訪問該實用程序的方法,並讓

如何在Microsoft Defender -Minitool上啟用/禁用定期掃描如何在Microsoft Defender -Minitool上啟用/禁用定期掃描Apr 17, 2025 am 12:43 AM

Microsft Defender Antivirus具有稱為周期性掃描的功能,當您在Windows 11/10設備上安裝了另一個防病毒產品時,可以啟用該功能。現在,PHP.CN的這篇文章教您如何在WI上啟用/禁用定期掃描

Excel超鏈接不起作用的智能技術Excel超鏈接不起作用的智能技術Apr 17, 2025 am 12:42 AM

您是否曾經遇到過“ Excel超鏈接不起作用”的問題?你知道如何處理嗎?在PHP.CN的這篇文章中,您可以獲得幾種可行的解決方案,以擺脫此問題。您將知道專業的數據恢復工具T

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器