How to close socket server?
ArturAralin opened this issue · comments
Artur commented
Hi! I have a small problem. When I call package.reload(app)
server responses to me
2019-03-05 15:19:22.413 [17165] main/116/server/0.0.0.0:4300 utils.c:939 E> LuajitError: builtin/socket.lua:80: attempt to use closed socket
Source here
local log = require 'log'
local ws = require('websocket')
local M = {}
local app
local address = 'ws://0.0.0.0:4300'
local ws_peers = {}
local ws_server
function M.init(config)
app = require 'app'
M.config = config
ws_server = ws.server(address, function (ws_peer)
log.info('new peer')
local id = ws_peer.peer:fd()
log.info('peer id' .. id)
table.insert(ws_peers, id, ws_peer)
while true do
local message, err = ws_peer:read()
log.info(message.data)
if not message or message.opcode == nil then
break
end
end
ws_peers[id] = nil
end)
log.info('websocket started')
end
function M.destroy()
log.info('close?')
log.info(ws_server:close())
end
return M
Michael Filonenko commented
It's relative to how tarantool socket module works with server event loop. The logic works find except log message.
https://github.com/tarantool/tarantool/blob/2.1/src/lua/socket.lua#L1066
Be carefull ws_server:close()
does not touch existing clients. Please, close they explicitly.
Artur commented
Ok. Thanks