From 356b1ef3a30ef6f4a27db69216fbcc33bcb98e17 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Wed, 23 Nov 2016 15:36:41 +0100 Subject: websocket-connection: avoid sending data if we are closing the connection We cannot trust the client to be nice and stop sending data when we are closing. If we receive a ping when closing the connection we need to avoid trying to send data after that. Change the code to be more robust and to not try to write in the socket if we are in the closed state. --- libsoup/soup-websocket-connection.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libsoup/soup-websocket-connection.c b/libsoup/soup-websocket-connection.c index 66742a1f..eff6ba66 100644 --- a/libsoup/soup-websocket-connection.c +++ b/libsoup/soup-websocket-connection.c @@ -348,6 +348,11 @@ send_message (SoupWebsocketConnection *self, guint8 *mask = 0; guint8 *at; + if (!(soup_websocket_connection_get_state (self) == SOUP_WEBSOCKET_STATE_OPEN)) { + g_debug ("Ignoring message since the connection is closed or is closing"); + return; + } + bytes = g_byte_array_sized_new (14 + length); outer = bytes->data; outer[0] = 0x80 | opcode; @@ -851,6 +856,12 @@ on_web_socket_output (GObject *pollable_stream, gssize count; gsize len; + if (soup_websocket_connection_get_state (self) == SOUP_WEBSOCKET_STATE_CLOSED) { + g_debug ("Ignoring message since the connection is closed"); + stop_output (self); + return TRUE; + } + frame = g_queue_peek_head (&pv->outgoing); /* No more frames to send */ -- cgit v1.2.1