Disconnect websockets clients properly.

context->state was being overwritten when websockets clients
attempted to disconnect, leaving them in limbo. This has been fixed.

Thanks to FeelyChau.
This commit is contained in:
Roger A. Light
2015-01-07 23:33:31 +00:00
parent ac5dbd428f
commit b52e3311d2
+3 -4
View File
@@ -353,8 +353,9 @@ void do_disconnect(struct mosquitto_db *db, struct mosquitto *context)
libwebsocket_callback_on_writable(context->ws_context, context->wsi);
}
context->sock = INVALID_SOCKET;
}else{
}else
#endif
{
if(db->config->connection_messages == true){
if(context->state != mosq_cs_disconnecting){
_mosquitto_log_printf(NULL, MOSQ_LOG_NOTICE, "Socket error on client %s, disconnecting.", context->id);
@@ -375,10 +376,8 @@ void do_disconnect(struct mosquitto_db *db, struct mosquitto *context)
context->id = NULL;
}
}
#ifdef WITH_WEBSOCKETS
context->state = mosq_cs_disconnected;
}
#endif
context->state = mosq_cs_disconnected;
}
/* Error ocurred, probably an fd has been closed.