diff --git a/core/httpd.js b/core/httpd.js index 5cd48aa35..e295a7ddc 100644 --- a/core/httpd.js +++ b/core/httpd.js @@ -237,7 +237,12 @@ function handleWebSocketRequest(request, response, client) { var array = new Uint8Array(packet.length + message.length); array.set(packet, 0); array.set(message, packet.length); - return client.write(array); + try { + return client.write(array); + } catch (error) { + client.close(); + throw error; + } } response.onMessage = null; diff --git a/src/socket.js.c b/src/socket.js.c index 8e0b7b1fd..5c9d29b49 100644 --- a/src/socket.js.c +++ b/src/socket.js.c @@ -891,13 +891,19 @@ int _socket_writeInternal(socket_t* socket, promiseid_t promise, const char* dat uv_write_t* request = (uv_write_t*)rawBuffer; memcpy(rawBuffer + sizeof(uv_write_t), data, length); - uv_buf_t buffer = { + uv_buf_t buffer = + { .base = rawBuffer + sizeof(uv_write_t), .len = length, }; request->data = (void*)(intptr_t)promise; - return uv_write(request, (uv_stream_t*)&socket->_socket, &buffer, 1, _socket_onWrite); + int result = uv_write(request, (uv_stream_t*)&socket->_socket, &buffer, 1, _socket_onWrite); + if (result != 0) + { + tf_free(rawBuffer); + } + return result; } static int _socket_write_tls(socket_t* socket, promiseid_t promise, const char* data, size_t size)