• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            SIGPIPE

            Posted on 2009-04-29 17:52 Prayer 閱讀(609) 評(píng)論(0)  編輯 收藏 引用 所屬分類: SOCKET
            當(dāng)一個(gè)進(jìn)程向接收了RST的套接口進(jìn)行寫(xiě)操作時(shí), 內(nèi)核給該進(jìn)程發(fā)一個(gè)SIGPIPE信號(hào)。
            這個(gè)信號(hào)默認(rèn)操作就是終止進(jìn)程, 一般寫(xiě)程序的時(shí)候都是屏蔽掉這個(gè)信號(hào)。


            下面是我以前總結(jié)的一些:
            原文:http://blog.chinaunix.net/u/6593/showart_304065.html

            RST的含義為“復(fù)位”,它是TCP在某些錯(cuò)誤情況下所發(fā)出的一種TCP分節(jié)。有三個(gè)條件可以產(chǎn)生RST:

            1), SYN到達(dá)某端口但此端口上沒(méi)有正在監(jiān)聽(tīng)的服務(wù)器。

            2), TCP想取消一個(gè)已有連接

            3), TCP接收了一個(gè)根本不存在的連接上的分節(jié)。



            1.  Connect 函數(shù)返回錯(cuò)誤ECONNREFUSED:

            如果對(duì)客戶的SYN的響應(yīng)是RST,則表明該服務(wù)器主機(jī)在我們指定的端口上沒(méi)有進(jìn)程在等待與之連接(例如服務(wù)器進(jìn)程也許沒(méi)有啟動(dòng)),這稱為硬錯(cuò)(hard error),客戶一接收到RST,馬上就返回錯(cuò)誤ECONNREFUSED.



            TCP為監(jiān)聽(tīng)套接口維護(hù)兩個(gè)隊(duì)列。兩個(gè)隊(duì)列之和不超過(guò)listen函數(shù)第二個(gè)參數(shù)backlog。

            當(dāng)一個(gè)客戶SYN到達(dá)時(shí),若兩個(gè)隊(duì)列都是滿的,TCP就忽略此分節(jié),且不發(fā)送RST.這個(gè)因?yàn)椋哼@種情況是暫時(shí)的,客戶TCP將重發(fā)SYN,期望不久就能在隊(duì)列中找到空閑條目。要是TCP服務(wù)器發(fā)送了一個(gè)RST,客戶connect函數(shù)將立即發(fā)送一個(gè)錯(cuò)誤,強(qiáng)制應(yīng)用進(jìn)程處理這種情況,而不是讓TCP正常的重傳機(jī)制來(lái)處理。還有,客戶區(qū)別不了這兩種情況:作為SYN的響應(yīng),意為“此端口上沒(méi)有服務(wù)器”的RST和意為“有服務(wù)器在此端口上但其隊(duì)列滿”的RST.



            Posix.1g允許以下兩種處理方法:忽略新的SYN,或?yàn)榇薙YN響應(yīng)一個(gè)RST.歷史上,所有源自Berkeley的實(shí)現(xiàn)都是忽略新的SYN。





            2.如果殺掉服務(wù)器端處理客戶端的子進(jìn)程,進(jìn)程退出后,關(guān)閉它打開(kāi)的所有文件描述符,此時(shí),當(dāng)服務(wù)器TCP接收到來(lái)自此客戶端的數(shù)據(jù)時(shí),由于先前打開(kāi)的那個(gè)套接字接口的進(jìn)程已終止,所以以RST響應(yīng)。

                  經(jīng)常遇到的問(wèn)題:

                          如果不判斷read , write函數(shù)的返回值,就不知道服務(wù)器是否響應(yīng)了RST, 此時(shí)客戶端如果向接收了RST的套接口進(jìn)行寫(xiě)操作時(shí),內(nèi)核給該進(jìn)程發(fā)一個(gè)SIGPIPE信號(hào)。此信號(hào)的缺省行為就是終止進(jìn)程,所以,進(jìn)程必須捕獲它以免不情愿地被終止。

                          進(jìn)程不論是捕獲了該信號(hào)并從其信號(hào)處理程序返回,還是不理會(huì)該信號(hào),寫(xiě)操作都返回EPIPE錯(cuò)誤。



            3.  服務(wù)器主機(jī)崩潰后重啟

            如果服務(wù)器主機(jī)與客戶端建立連接后崩潰,如果此時(shí),客戶端向服務(wù)器發(fā)送數(shù)據(jù),而服務(wù)器已經(jīng)崩潰不能響應(yīng)客戶端ACK,客戶TCP將持續(xù)重傳數(shù)據(jù)分節(jié),試圖從服務(wù)器上接收一個(gè)ACK,如果服務(wù)器一直崩潰客戶端會(huì)發(fā)現(xiàn)服務(wù)器已經(jīng)崩潰或目的地不可達(dá),但可能需要比較長(zhǎng)的時(shí)間; 如果服務(wù)器在客戶端發(fā)現(xiàn)崩潰前重啟,服務(wù)器的TCP丟失了崩潰前的所有連接信息,所以服務(wù)器TCP對(duì)接收的客戶數(shù)據(jù)分節(jié)以RST響應(yīng)。
            老男人久久青草av高清| 精品久久久久久亚洲精品| 国产99久久九九精品无码| 国产精品综合久久第一页| 思思久久99热只有频精品66| 亚洲国产精品无码成人片久久| 久久夜色精品国产噜噜噜亚洲AV| 99久久免费国产精精品| 久久精品这里只有精99品| 色8久久人人97超碰香蕉987| 91性高湖久久久久| 无码国内精品久久综合88 | 91精品国产综合久久香蕉| 亚洲精品无码专区久久同性男| 久久久久亚洲精品天堂| 久久er国产精品免费观看8| 久久精品免费一区二区| 久久精品亚洲乱码伦伦中文| 精品久久久久香蕉网| 亚洲国产成人久久综合区| 久久99国产精品二区不卡| 久久天天躁夜夜躁狠狠| 久久国产综合精品五月天| 99久久无码一区人妻a黑| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 国产福利电影一区二区三区,免费久久久久久久精 | 无码人妻精品一区二区三区久久久| 免费观看久久精彩视频| 久久天天躁狠狠躁夜夜网站| 精品久久亚洲中文无码| 久久精品免费一区二区| 久久天天躁夜夜躁狠狠躁2022| 天堂无码久久综合东京热| 热RE99久久精品国产66热| 精品人妻伦九区久久AAA片69| www亚洲欲色成人久久精品| 国产成人99久久亚洲综合精品| 伊人久久综合热线大杳蕉下载| 亚洲欧美日韩精品久久| 国产精品免费久久久久影院| 久久国产成人|