The spec for websocket provides a range for custom reason codes to be sent when closing the websocket (4000-4999). When closing a websocket connection from the client passing a custom reason code, the code is not received within the onclose event. **Code on websocketServer:** this._httpServer = createServer(); this._httpServer.listen(port, () => { }); this._websocketServer = new websocketServer({ httpServer: this._httpServer }); console.log(`Websocket server now listenening on port ${port}`); this._websocketServer.on('request', (request) => { const connection = request.accept(undefined, request.origin); connection.on('message', function (message) { //DoSomething }); } ); **Code on client side:** See JSFiddle https://jsfiddle.net/254megph/2/ websocket.close(4000, "manual close"); When closing the connection by clicking the button the JSFiddle, the onClose event is fired with reason code 1000 instead of 4000.