diff --git a/examples/websocket.c b/examples/websocket.c index 4451969b5a046fbf27842e71975330c35535c98b..602e687e31462f8f6fc3d36b4438b3eca9bfaa6f 100644 --- a/examples/websocket.c +++ b/examples/websocket.c @@ -3,6 +3,7 @@ #include <stdio.h> #include <string.h> +#include <stdlib.h> #include "mongoose.h" static int event_handler(struct mg_event *event) { @@ -25,14 +26,16 @@ static int event_handler(struct mg_event *event) { mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT, server_ready_message, strlen(server_ready_message)); + // Read messages sent by client. Echo them back. while ((len = mg_websocket_read(event->conn, &bits, &data)) > 0) { - // Echo message back to the client - mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT, data, len); printf("got message: [%.*s]\n", len, data); + mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT, data, len); + free(data); // It's our responsibility to free allocated message + + // If the message is "exit", close the connection, exit the loop if (memcmp(data, "exit", 4) == 0) { mg_websocket_write(event->conn, WEBSOCKET_OPCODE_CONNECTION_CLOSE, "", 0); - free(data); break; } }