簡體   English   中英

如果socketChannel.close()得到IOException,該怎么辦?

[英]What is the right thing to do if a socketChannel.close() got IOException?

我有一個包裝socketChannel的類,並具有如下的close()方法:

public void close() {
    // ... logic ...
    try {
        socketChannel.close();
    } catch (IOException e) {
          // ???
    }
    this.isConnected = false;
}

我希望在此操作結束時,將關閉socketChannel而不將其注冊到其選擇器。 我閱讀並發現上面的代碼足以滿足要求,但是如果得到IOException,會發生什么?

我的感覺是“吞咽”就足夠了,但是我錯過了什么嗎?

答案將取決於結案引發異常是否重要。 而且,如果這很重要,那么下一個問題是您是否需要對它做些其他事情……而不是對其進行報告。

場景1。

Web服務器在關閉發送響應的輸出流時會遇到異常。 一個典型的原因是用戶在錯誤的時間關閉了Web瀏覽器或失去了網絡連接。 服務器端異常無關緊要(對服務器/服務器管理員而言),甚至不值得記錄。

場景2。

您正在做的事情涉及與多台服務器進行通信,因此重要的是要知道它們都“獲得了信息”。 如果在結束時發生異常,則可能表示未發生異常。 可能您需要登錄。 也許您需要告訴服務器。 也許您需要使一些封閉的事務回滾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM