linux socket 中判斷對方關閉的兩種方式

2021-06-16 05:46:31 字數 417 閱讀 8224

在tcp中,我是伺服器,對方是客戶端,對方掛掉了,我怎麼能夠知道呢?

unp中說的fin,rst對於應用層來講,是不可見的……

我跟客戶端的聯絡只是通過read,write嘛。

socket又不會自動給我訊號啥的。

當對方掛掉了之後呢

如果對方正常關閉的,應該發乙個fin過來。

我這邊的select到乙個可讀,然後讀返回0.

如果對方不正常掛掉了,應該發乙個rst過來。

我這邊select表示可寫。

然後寫第一次,引發乙個rst,寫第二次,引發乙個sigpipe。

這個sigpipe預設動作是乾掉程序。

因此我們處理掉這個訊號。

那麼,第一次觸發rst的write出去的資料就丟掉了,找不回來了。

這個~~我還沒有想出來怎麼辦……。

JUnit中對Exception的判斷

說來慚愧,雖然之前已經看過junit的原始碼了,也寫了幾篇部落格,但是長時間不寫test case,今天想要寫拋exception相關的test case時,竟然不知道怎麼寫了。好記性不如爛筆頭,記下來先 對於使用驗證test case方法中丟擲的異常,我起初想到的是一種比較簡單的方法,但是顯得比較...

Python中對變數是否為None的判斷

三種主要的寫法有 第一種 if x is none 第二種 if not x 當x為none,false,空字串 0,空列表,空字典 空元組 這些時,not x為真,即無法分辨出他們之間的不同。第三種 if not x is none 在python中,none 空列表 空字典 空元組 0等一系列代...

在C 中對中文網域名稱判斷和解析

什麼是中文網域名稱,及其的編碼方式?中文網域名稱是含有中文的新一代網域名稱,同英文網域名稱一樣,是網際網路上的門牌號碼。中文網域名稱在技術上符合2003年3月份ietf發布的多語種網域名稱國際標準 rfc3454 rfc3490 rfc3491 rfc3492 中文網域名稱屬於網際網路上的基礎服務,...