У меня есть программа Java, работающая на iSeries, которая подключается к процессу сервера на том же хосте.Вот отредактированная версия клиентского кода Java:
while (true) {
try {
socket = new Socket(myHost, myPort);
} catch (UnknownHostException ex) {
// Quit
} catch (ConnectException ex) {
// Wait for a while and retry
continue;
} catch (IOException ex) {
// Quit
}
break;
}
// Do stuff with socket...
Иногда, при вызове конструктора Socket (), я получаю SocketException, который попадает в обработчик IOException, который выходит из приложения (это может быть немного резкимреакция, но я не хочу менять это, пока не пойму проблему более полно).Вот трассировка стека:
java.net.SocketException: A connection with a remote socket was reset by that
at java.lang.Throwable.<init>(Throwable.java:195)
at java.lang.Exception.<init>(Exception.java:41)
at java.io.IOException.<init>(IOException.java:40)
at java.net.SocketException.<init>(SocketException.java:29)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:488)
at java.net.Socket.connect(Socket.java:438)
at java.net.Socket.<init>(Socket.java:148)
at com.foo.AccessObject.<init>(AccessObject.java:36)
Я понимаю, что если я читаю из сокета, а другой узел закрывает его, я получу исключение SocketException.Я также понимаю, что в случае сбоя соединения я получу исключение ConnectionException.Чего я не понимаю, так это как получить SocketException при создании Socket.Я думаю, что могу устранить хитрые сетевые устройства, так как соединение идет к localhost.
Я потенциально могу обойти эту проблему, перехватывая SocketException вместо ConnectionException, но я не хочу маскировать эту проблему, по крайней мере, пока не пойму ее больше.У кого-нибудь есть идеи о том, что может быть причиной ошибки?