diff options
author | Ignacio Casal Quinteiro <ignacio.casal@nice-software.com> | 2016-11-23 15:36:41 +0100 |
---|---|---|
committer | Ignacio Casal Quinteiro <icq@gnome.org> | 2016-11-23 16:03:32 +0100 |
commit | 356b1ef3a30ef6f4a27db69216fbcc33bcb98e17 (patch) | |
tree | 6277ccd5d1479e32bb1e520a32ffcfb48f2ebbf2 | |
parent | 1bb0157b057592704c2afc0cd488133726cf617e (diff) | |
download | libsoup-wip/websocket-close-bug.tar.gz |
websocket-connection: avoid sending data if we are closing the connectionwip/websocket-close-bug
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.
-rw-r--r-- | libsoup/soup-websocket-connection.c | 11 |
1 files changed, 11 insertions, 0 deletions
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 */ |