Здравствуйте.
Есть сферический код TCP-сервера на луа:
local socket = require("socket")
local server = assert(socket.tcp())
assert(server:bind("127.0.0.1", 9970))
-- Опции
assert(server:setoption("keepalive", false))
assert(server:setoption("reuseaddr", false))
assert(server:setoption("tcp-nodelay", true))
assert(server:setoption("linger", {on=false, timeout=1}))
assert(server:listen(0))
local con = assert(server:accept())
assert(con:send("HELLO!!!\n"))
assert(con:receive("*a"))
Подключаюсь к нему с помощью
nc localhost 9970 -v
Если развывать соединение, нажимая Ctrl+C в терминале с nc, то всё норм.
Если же разрывать соединение нажимая Ctrl+C в терминале с сервером, то его последующий запуск вываливается с ошибкой «address already in use» в строке с bind. Через минуту-две запускается нормально
Как побороть «address already in use»? Может подкрутить какие-то опции?
PS: сишников скастовал, потомучто только они разбираются в подобной низкоуровневой магии )