socket write出EPIPE錯誤

來源:互聯網
上載者:User

     最近弄一個程式,用到unix socket來進行處理序間通訊,發現有時候用戶端調用write函數時,傳回值為-1,errno為EPIPE。經查說是串連已經關閉導致的。

可是我的用戶端明明是先串連,也沒報錯,然後再write的,為什麼會串連關閉了。

    經過測試,是服務端重啟,然後用戶端write,如果這一次正確,那麼服務端重啟,用戶端write,必然出錯,然後又重啟服務端,用戶端write必然正確,這樣正確和錯誤交叉。看來問題就出在這了。

    後來檢查用戶端代碼,發現為了降低服務端負載,用戶端每次write完,都沒有close串連,下次用的是同一個串連來發訊息,也並沒有每次都去串連伺服器:

    if (-1 == re_conn )
    {
        re_conn = connect_unix_socket(IP_UNIX_SOCKET_PATH,SOCK_STREAM);
    }

    串連是經過判斷的。

    所以,服務端重啟,必然導致串連中止,但下次用戶端不一定去重連了,因為re_conn很有可能不是-1,所以write會失敗。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.