@@ -98,6 +98,7 @@ enum BoltConnectionError _transform_error(int error_code)
9898 case WSAENETRESET :
9999 case WSAENETDOWN :
100100 return BOLT_NETWORK_UNREACHABLE ;
101+ case WSAEWOULDBLOCK :
101102 case WSAETIMEDOUT :
102103 return BOLT_TIMED_OUT ;
103104 default :
@@ -118,8 +119,6 @@ enum BoltConnectionError _transform_error(int error_code)
118119 case ENOBUFS :
119120 case ENOMEM :
120121 return BOLT_OUT_OF_MEMORY ;
121- case EAGAIN :
122- return BOLT_OUT_OF_PORTS ;
123122 case ECONNREFUSED :
124123 return BOLT_CONNECTION_REFUSED ;
125124 case ECONNRESET :
@@ -128,6 +127,7 @@ enum BoltConnectionError _transform_error(int error_code)
128127 return BOLT_INTERRUPTED ;
129128 case ENETUNREACH :
130129 return BOLT_NETWORK_UNREACHABLE ;
130+ case EAGAIN :
131131 case ETIMEDOUT :
132132 return BOLT_TIMED_OUT ;
133133 default :
@@ -152,6 +152,22 @@ enum BoltConnectionError _last_error(struct BoltConnection* connection)
152152 return _transform_error (error_code );
153153}
154154
155+ enum BoltConnectionError _last_error_ssl (struct BoltConnection * connection , int ret )
156+ {
157+ int ssl_error_code = SSL_get_error (connection -> ssl , ret );
158+ BoltLog_error (connection -> log , "ssl error code: %d" , ssl_error_code );
159+ switch (ssl_error_code ) {
160+ case SSL_ERROR_NONE :
161+ return BOLT_SUCCESS ;
162+ case SSL_ERROR_SYSCALL :
163+ case SSL_ERROR_WANT_READ :
164+ case SSL_ERROR_WANT_WRITE :
165+ return _last_error (connection );
166+ default :
167+ return BOLT_TLS_ERROR ;
168+ }
169+ }
170+
155171void _set_status (struct BoltConnection * connection , enum BoltConnectionStatus status , enum BoltConnectionError error )
156172{
157173 enum BoltConnectionStatus old_status = connection -> status ;
@@ -291,9 +307,9 @@ int _open(struct BoltConnection* connection, enum BoltTransport transport, const
291307 int error_code = _last_error_code (connection );
292308 switch (error_code ) {
293309#if USE_WINSOCK
294- case WSAEWOULDBLOCK : {
295- break ;
296- }
310+ case WSAEWOULDBLOCK : {
311+ break ;
312+ }
297313#else
298314 case EINPROGRESS : {
299315 break ;
@@ -481,7 +497,7 @@ int _send(struct BoltConnection* connection, const char* data, int size)
481497 BoltLog_error (connection -> log , "Socket error %d on transmit" , connection -> error );
482498 break ;
483499 case BOLT_SECURE_SOCKET :
484- _set_status (connection , BOLT_DEFUNCT , SSL_get_error (connection -> ssl , sent ));
500+ _set_status (connection , BOLT_DEFUNCT , _last_error_ssl (connection , sent ));
485501 BoltLog_error (connection -> log , "SSL error %d on transmit" , connection -> error );
486502 break ;
487503 }
@@ -535,7 +551,7 @@ int _receive(struct BoltConnection* connection, char* buffer, int min_size, int
535551 BoltLog_error (connection -> log , "Socket error %d on receive" , connection -> error );
536552 break ;
537553 case BOLT_SECURE_SOCKET :
538- _set_status (connection , BOLT_DEFUNCT , SSL_get_error (connection -> ssl , single_received ));
554+ _set_status (connection , BOLT_DEFUNCT , _last_error_ssl (connection , single_received ));
539555 BoltLog_error (connection -> log , "SSL error %d on receive" , connection -> error );
540556 break ;
541557 }
0 commit comments