From e033057f5c4678d949bfec977de1819ff57b6535 Mon Sep 17 00:00:00 2001 From: xicilion Date: Sat, 28 Oct 2017 08:14:49 +0800 Subject: [PATCH] websocket, feat: close a closed socket not throw error. --- fibjs/src/websocket/WebSocket.cpp | 6 +++--- test/ws_test.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fibjs/src/websocket/WebSocket.cpp b/fibjs/src/websocket/WebSocket.cpp index bff00fa713..1256cb15e8 100644 --- a/fibjs/src/websocket/WebSocket.cpp +++ b/fibjs/src/websocket/WebSocket.cpp @@ -499,12 +499,12 @@ result_t WebSocket::get_readyState(int32_t& retVal) result_t WebSocket::close(int32_t code, exlib::string reason) { - if (m_readyState.CompareAndSwap(ws_base::_OPEN, ws_base::_CLOSING) != ws_base::_OPEN) - return CHECK_ERROR(CALL_E_INVALID_CALL); - if (code != 1000 && (code < 3000 || code > 4999)) return CHECK_ERROR(Runtime::setError("websocket: The code must be either 1000, or between 3000 and 4999.")); + if (m_readyState.CompareAndSwap(ws_base::_OPEN, ws_base::_CLOSING) != ws_base::_OPEN) + return 0; + new asyncSend(this, code, reason); return 0; } diff --git a/test/ws_test.js b/test/ws_test.js index 2dc96f6d31..f3d3b17115 100644 --- a/test/ws_test.js +++ b/test/ws_test.js @@ -519,6 +519,7 @@ describe('ws', () => { assert.equal(s.readyState, ws.OPEN); s.close(); + s.close(); }); it('send/onmessage', () => {