Java ServerSocket.close()。它什么时候抛出异常?

Java ServerSocket.close()。它什么时候抛出异常?,java,exception-handling,serversocket,ioexception,Java,Exception Handling,Serversocket,Ioexception,我一直在想这个问题很长一段时间了,我很自然地捕捉到了调用ServerSocket.close()可能引发的任何异常。然而,我从未见过它抛出异常 国家: 然而,正如我所说,我从未见过它抛出异常。在什么情况下,关闭serversocket时会发生I/O错误?您可以假设手头的代码如下所示: public void terminate() { try { serverSocket.close(); } catch (IOException ex) { Sy

我一直在想这个问题很长一段时间了,我很自然地捕捉到了调用ServerSocket.close()可能引发的任何异常。然而,我从未见过它抛出异常

国家:

然而,正如我所说,我从未见过它抛出异常。在什么情况下,关闭serversocket时会发生I/O错误?您可以假设手头的代码如下所示:

public void terminate() {
    try {
        serverSocket.close();
    } catch (IOException ex) {
        System.err.println(ex.getMessage()); // when and how?
    }
}

我在互联网上搜索了答案,但没有找到任何可以澄清这一点的答案。

如果在尝试关闭套接字时套接字已经关闭,则会抛出一个
IOException

@olavimutanoja这实际上取决于实现。有许多套接字实现,它们都可能有独立的错误。此外,IOException相当广泛,似乎更像是实现抛出它想要的任何基于I/O的错误并正确处理的一种方式。@Obicere我理解这一点。我要问的是,ServerSocket.close()何时抛出IOException?我不关心其他许多实现。@olavimutanoja完全是在指定时实现的。确切地说:
IOException-如果在关闭此套接字时发生I/O错误。
这确实取决于
SocketImpl
@Obicere的实现。您能详细说明一下吗?我的意思是你能提供一个ServerSocket.close()抛出异常的例子吗<代码>IOException-如果在关闭此套接字时发生I/O错误并不意味着什么,如果I/O错误从未真正发生过,这意味着我被迫捕获一个不存在的异常,而我认为这并不酷。@olavimutanoja它不是运行时异常。如果出于任何原因可能会抛出,则需要正确处理。当然,也许默认实现不会抛出一个。但是假设我自己实现,如果用户名中有
e
,我想抛出一个IOException。这种类型的行为需要特别涵盖,即使它看起来有多多余。有一个用法,因此添加了它。无法确认此行为:调用两次socket.close()不会抛出(java8)。
public void terminate() {
    try {
        serverSocket.close();
    } catch (IOException ex) {
        System.err.println(ex.getMessage()); // when and how?
    }
}