tarantool / websocket

A websocket implementation for Tarantool

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to close socket server?

ArturAralin opened this issue · comments

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

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.

commented

Ok. Thanks