繁体   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