ConnectDatum tryConnect(SocketChannel dstSocket) {
final Timer timer = new Timer();
try {
dstSocket.connect(dst);
return new ConnectDatum(ConnectResult.OK, timer.getAsLong(), Optional.empty());
} catch (SocketTimeoutException | ClosedByInterruptException ex) {
return new ConnectDatum(ConnectResult.TIMED_OUT, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (NoRouteToHostException ex) {
return new ConnectDatum(ConnectResult.NO_ROUTE_TO_HOST, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (PortUnreachableException ex) {
return new ConnectDatum(ConnectResult.PORT_UNREACHABLE, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (UnknownHostException ex) {
return new ConnectDatum(ConnectResult.UNKNOWN_HOST, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (UnknownServiceException ex) {
return new ConnectDatum(ConnectResult.UNKNOWN_SERVICE, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (ProtocolException ex) {
return new ConnectDatum(ConnectResult.PROTOCOL_ERROR, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (BindException ex) {
return new ConnectDatum(ConnectResult.BIND_FAILED, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (ConnectException ex) {
return new ConnectDatum(ConnectResult.CONNECT_FAILED, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (SocketException ex) {
return new ConnectDatum(ConnectResult.CONNECT_FAILED, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
} catch (IOException ex) {
return new ConnectDatum(ConnectResult.IO_ERROR, timer.getAsLong(), Optional.ofNullable(ex.getMessage()));
}
}