【tcp】關(guān)于tcp socket出現(xiàn)的“connection reset by peer”和“broken pipe”

在socket通信過程中蔼水,經(jīng)常發(fā)現(xiàn)客戶端或者服務(wù)器的日志中出現(xiàn)“broken pipe”或者“connection reset by peer”的錯(cuò)誤提示。

以前一直以為自己理解了這兩個(gè)錯(cuò)誤異常提示所包含的意義儒飒,而實(shí)際理解完全錯(cuò)誤舵盈。

我的錯(cuò)誤理解和下面這段來自blogspot的表述差不多:

```

Maybe I'm just dumb, but I always thought "broken pipe" meant, "the other end of this socket closed before I finished sending something" and "connection reset by peer" meant, well, roughly the same thing. (As well as indicating some slightly more esoteric problems.)

Turns out though, "broken pipe" actually means "I just tried to send something and the socket was already closed to sending."

So in the following example, if the other end of (TCP) socket "sock" closes or dies before the write method, "connection reset by peer" will be raised. The next write will give a broken-pipe error, since the socket now knows that further sending is invalid.

```

```

try:

? ? sock.write('foo')

except:

? ? pass # connection reset by peer

sock.write('bar') # broken pipe

```


reset報(bào)文發(fā)送場(chǎng)景

RST的標(biāo)志位论矾,這個(gè)標(biāo)識(shí)為在如下幾種情況下會(huì)被設(shè)置,以下是我了解的情況沛简,可能還有更多的場(chǎng)景齐鲤,沒有驗(yàn)證:

1. 當(dāng)嘗試和未開放的服務(wù)器端口建立tcp連接時(shí),服務(wù)器tcp將會(huì)直接向客戶端發(fā)送reset報(bào)文

2. 雙方之前已經(jīng)正常建立了通信通道椒楣,也可能進(jìn)行過了交互给郊,當(dāng)某一方在交互的過程中發(fā)生了異常,如崩潰等捧灰,異常的一方會(huì)向?qū)Χ税l(fā)送reset報(bào)文淆九,通知對(duì)方將連接關(guān)閉

3. 當(dāng)收到TCP報(bào)文统锤,但是發(fā)現(xiàn)該報(bào)文不是已建立的TCP連接列表可處理的,則其直接向?qū)Χ税l(fā)送reset報(bào)文

4. ack報(bào)文丟失炭庙,并且超出一定的重傳次數(shù)或時(shí)間后饲窿,會(huì)主動(dòng)向?qū)Χ税l(fā)送reset報(bào)文釋放該TCP連接


其實(shí)我們java異常里看到的Broken pipe或者Connection reset by peer信息不是jdk或者jvm里定義的,我看到這些關(guān)鍵字往往會(huì)首先搜索下jdk或者h(yuǎn)otspot源碼找到位置進(jìn)行上下文分析焕蹄,但是沒找到逾雄,后面才想到應(yīng)該是Linux或者glibc里定義的,果然在glibc里看到了如上的描述和定義腻脏。

對(duì)于Broken pipe在管道的另外一端沒有進(jìn)程在讀的時(shí)候就會(huì)拋出此異常鸦泳,Connection reset by peer的描述其實(shí)不是很正確,從我的實(shí)踐來看只描述了一方面永品,其實(shí)在某一端正常close之后做鹰,也是可能會(huì)有此異常的。


connection reset by peer”和”broken pipe”出現(xiàn)的場(chǎng)景:

1)往一個(gè)對(duì)端已經(jīng)close的通道寫數(shù)據(jù)的時(shí)候鼎姐,對(duì)方的tcp會(huì)收到這個(gè)報(bào)文钾麸,并且反饋一個(gè)reset報(bào)文。當(dāng)收到reset報(bào)文的時(shí)候症见,繼續(xù)做select讀數(shù)據(jù)的時(shí)候就會(huì)拋出Connect reset by peer的異常喂走,。

2)當(dāng)?shù)谝淮瓮粋€(gè)對(duì)端已經(jīng)close的通道寫數(shù)據(jù)的時(shí)候會(huì)和上面的情況一樣谋作,會(huì)收到reset報(bào)文。當(dāng)再次往這個(gè)socket寫數(shù)據(jù)的時(shí)候乎芳,就會(huì)拋出Broken pipe了 遵蚜。根據(jù)tcp的約定,當(dāng)收到reset包的時(shí)候奈惑,上層必須要做出處理吭净,調(diào)用將socket文件描述符進(jìn)行關(guān)閉,其實(shí)也意味著pipe會(huì)關(guān)閉肴甸,因此會(huì)拋出這個(gè)顧名思義的異常寂殉。



參考


從tcp原理角度理解Broken pipe和Connection Reset by Peer的區(qū)別

http://lovestblog.cn/blog/2014/05/20/tcp-broken-pipe


關(guān)于tcp socket出現(xiàn)的”connection reset by peer“和“broken pipe”

http://mdba.cn/2015/04/07/%E5%85%B3%E4%BA%8Etcp-socket%E5%87%BA%E7%8E%B0%E7%9A%84connection-reset-by-peer%E5%92%8Cbroken-pipe

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市原在,隨后出現(xiàn)的幾起案子友扰,更是在濱河造成了極大的恐慌,老刑警劉巖庶柿,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件村怪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浮庐,警方通過查閱死者的電腦和手機(jī)甚负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梭域,你說我怎么就攤上這事斑举。” “怎么了病涨?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵富玷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我没宾,道長(zhǎng)凌彬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任循衰,我火速辦了婚禮铲敛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘会钝。我一直安慰自己伐蒋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布迁酸。 她就那樣靜靜地躺著先鱼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奸鬓。 梳的紋絲不亂的頭發(fā)上焙畔,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音串远,去河邊找鬼宏多。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澡罚,可吹牛的內(nèi)容都是我干的伸但。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼留搔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼更胖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隔显,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤却妨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荣月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體管呵,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年哺窄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捐下。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片账锹。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坷襟,靈堂內(nèi)的尸體忽然破棺而出奸柬,到底是詐尸還是另有隱情,我是刑警寧澤婴程,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布廓奕,位于F島的核電站,受9級(jí)特大地震影響档叔,放射性物質(zhì)發(fā)生泄漏桌粉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一衙四、第九天 我趴在偏房一處隱蔽的房頂上張望铃肯。 院中可真熱鬧,春花似錦传蹈、人聲如沸押逼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挑格。三九已至,卻和暖如春沾歪,著一層夾襖步出監(jiān)牢的瞬間漂彤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工灾搏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留显歧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓确镊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親范删。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕾域,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容