diff --git a/lib/client.c b/lib/client.c
old mode 100644
new mode 100755
index fd7bb186b1ba86b65d862d058d3c789fb0a460ae..35fe8a19dbb431bd404e6e35023ff33c6edb0c61
--- a/lib/client.c
+++ b/lib/client.c
@@ -868,9 +868,7 @@ bail3:
 	close_reason = LWS_CLOSE_STATUS_NOSTATUS;
 
 bail2:
-	if (wsi->protocol &&
-	    (wsi->state == LWSS_ESTABLISHED ||
-	     wsi->state == LWSS_CLIENT_UNCONNECTED)) {
+	if (wsi->protocol && wsi->state == LWSS_ESTABLISHED) {
 		if (isErrorCodeReceived && p) {
 			wsi->protocol->callback(wsi,
 				LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
old mode 100644
new mode 100755
index 3f5760b537abf810b9a2ded71bbd4a6cf69937e7..99f8ec1269adc287f6ab66ce48df1ebc4a3e5f74
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -405,10 +405,20 @@ just_kill_connection:
 					       wsi->user_space, NULL, 0 );
 	} else if (wsi->mode == LWSCM_WSCL_WAITING_SERVER_REPLY ||
 		   wsi->mode == LWSCM_WSCL_WAITING_CONNECT) {
+		char* errorString;
+
 		lwsl_debug("Connection closed before server reply\n");
-		context->protocols[0].callback(wsi,
+		errorString = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP);
+		if (errorString) {
+			context->protocols[0].callback(wsi,
+					LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
+					wsi->user_space, errorString,
+					(unsigned int)strlen(errorString));
+		} else {
+			context->protocols[0].callback(wsi,
 					LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
 					wsi->user_space, NULL, 0);
+		}
 	} else
 		lwsl_debug("not calling back closed mode=%d state=%d\n",
 			   wsi->mode, wsi->state_pre_close);