diff --git a/lib/net_mosq.c b/lib/net_mosq.c index c51749c3..9684b224 100644 --- a/lib/net_mosq.c +++ b/lib/net_mosq.c @@ -230,22 +230,23 @@ int _mosquitto_socket_close(struct mosquitto *mosq) } #endif - if((int)mosq->sock >= 0){ -#ifdef WITH_BROKER - HASH_DELETE(hh_sock, db->contexts_by_sock, mosq); -#endif - rc = COMPAT_CLOSE(mosq->sock); - mosq->sock = INVALID_SOCKET; #ifdef WITH_WEBSOCKETS - }else if(mosq->sock == WEBSOCKET_CLIENT){ + if(mosq->wsi) + { if(mosq->state != mosq_cs_disconnecting){ mosq->state = mosq_cs_disconnect_ws; } - if(mosq->wsi){ - libwebsocket_callback_on_writable(mosq->ws_context, mosq->wsi); - } - mosq->sock = INVALID_SOCKET; + libwebsocket_callback_on_writable(mosq->ws_context, mosq->wsi); + }else #endif + { + if((int)mosq->sock >= 0){ +#ifdef WITH_BROKER + HASH_DELETE(hh_sock, db->contexts_by_sock, mosq); +#endif + rc = COMPAT_CLOSE(mosq->sock); + mosq->sock = INVALID_SOCKET; + } } #ifdef WITH_BROKER