diff options
Diffstat (limited to 'java/src/IceSSL/TransceiverI.java')
-rw-r--r-- | java/src/IceSSL/TransceiverI.java | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/java/src/IceSSL/TransceiverI.java b/java/src/IceSSL/TransceiverI.java index 97ce62c558c..0d56e6f5a83 100644 --- a/java/src/IceSSL/TransceiverI.java +++ b/java/src/IceSSL/TransceiverI.java @@ -28,36 +28,48 @@ final class TransceiverI implements IceInternal.Transceiver public synchronized IceInternal.SocketStatus initialize(int timeout) { - if(_state == StateNeedConnect && timeout == 0) - { - _state = StateConnectPending; - return IceInternal.SocketStatus.NeedConnect; - } - else if(_state <= StateConnectPending) - { - IceInternal.Network.doFinishConnect(_fd, timeout); - _state = StateConnected; - _desc = IceInternal.Network.fdToString(_fd); - } - assert(_state == StateConnected); - - IceInternal.SocketStatus status; - do + try { - status = handshakeNonBlocking(); - if(timeout == 0) + if(_state == StateNeedConnect && timeout == 0) + { + _state = StateConnectPending; + return IceInternal.SocketStatus.NeedConnect; + } + else if(_state <= StateConnectPending) { - return status; + IceInternal.Network.doFinishConnect(_fd, timeout); + _state = StateConnected; + _desc = IceInternal.Network.fdToString(_fd); } + assert(_state == StateConnected); - if(status != IceInternal.SocketStatus.Finished) + IceInternal.SocketStatus status; + do { - handleSocketStatus(status, timeout); + status = handshakeNonBlocking(); + if(timeout == 0) + { + return status; + } + + if(status != IceInternal.SocketStatus.Finished) + { + handleSocketStatus(status, timeout); + } } + while(status != IceInternal.SocketStatus.Finished); + } + catch(Ice.LocalException ex) + { + if(_instance.networkTraceLevel() >= 2) + { + String s = "failed to establish ssl connection\n" + _desc + "\n" + ex; + _logger.trace(_instance.networkTraceCategory(), s); + } + throw ex; } - while(status != IceInternal.SocketStatus.Finished); - return status; + return IceInternal.SocketStatus.Finished; } // |