From 0e6c4e16057a781e20acc99abb6ed8b9700a8e65 Mon Sep 17 00:00:00 2001 From: Ian Craggs Date: Tue, 26 Aug 2014 13:33:18 +0100 Subject: [PATCH] Better SSL socket connect handling --- src/MQTTAsync.c | 5 ++++- src/SSLSocket.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/MQTTAsync.c b/src/MQTTAsync.c index 5763465a..4ca38364 100644 --- a/src/MQTTAsync.c +++ b/src/MQTTAsync.c @@ -2424,8 +2424,11 @@ int MQTTAsync_connecting(MQTTAsyncs* m) if ((rc = SSL_set_session(m->c->net.ssl, m->c->session)) != 1) Log(TRACE_MIN, -1, "Failed to set SSL session with stored data, non critical"); rc = SSLSocket_connect(m->c->net.ssl, m->c->net.socket); - if (rc == -1) + if (rc == TCPSOCKET_INTERRUPTED) + { + rc = MQTTCLIENT_SUCCESS; /* the connect is still in progress */ m->c->connect_state = 2; + } else if (rc == SSL_FATAL) { rc = SOCKET_ERROR; diff --git a/src/SSLSocket.c b/src/SSLSocket.c index 84769bb1..203707a1 100644 --- a/src/SSLSocket.c +++ b/src/SSLSocket.c @@ -573,6 +573,8 @@ int SSLSocket_connect(SSL* ssl, int sock) error = SSLSocket_error("SSL_connect", ssl, sock, rc); if (error == SSL_FATAL) rc = error; + if (error == SSL_ERROR_WANT_READ || error == SSL_ERROR_WANT_WRITE) + rc = TCPSOCKET_INTERRUPTED; } FUNC_EXIT_RC(rc);