2014-11-04 2 views
2

Я давно задумывался об этом, и я послушно поймал все возможные исключения, которые вызывал сервер ServerSocket.close(). Однако ни разу я не видел, как он бросает исключение.ServerSocket.close(). Когда он генерирует исключение?

Javadocs состояние:

Throws: 
    IOException - if an I/O error occurs when closing the socket. 

Однако, как я уже говорил, я никогда не видел его бросать исключение. В каких случаях возникает ошибка ввода-вывода при закрытии serverocket? Можно предположить, код под рукой выглядит следующим образом:

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

Я искал в Интернете для ответа, но не мог придумать ничего, что бы прояснить это.

+0

@OlaviMustanoja действительно зависит от реализации. Существует множество реализаций сокетов, и каждый из них может иметь независимые ошибки. Кроме того, IOException довольно широк и, похоже, больше похоже на способ реализации любой ошибки ввода-вывода, которую он хочет, и правильной обработки. – Obicere

+0

@Obicere Я понимаю это. Я спрашиваю, когда ServerSocket.close() выдает исключение IOException? Меня не волнует множество других реализаций. –

+0

@OlaviMustanoja точно если указано. В буквальном смысле: 'IOException - если ошибка ввода-вывода возникает при закрытии этого сокета.' Это действительно зависит от реализации 'SocketImpl' – Obicere

ответ

3

IOException будет выброшен, если сокет уже закрыт при попытке его закрыть.

+0

Не удается подтвердить это поведение: вызов два раза. Socket.close() выполняет _not_ throw (java8). – Heri

Смежные вопросы