mol*_*loo 5 sockets lua tcp luasocket
我正在使用Lua编程语言编写服务器,网络层基于LuaSocket.
我在参考手册中找不到任何方法来检测套接字是否已关闭,只是尝试从中读取数据(在调用时它将返回nil和字符串'close').
我的代码看起来像这样:
local socket = require 'socket'
local server = socket.tcp()
local port = 9527
server:bind('*', port)
local status, errorMessage = server:listen()
if status == 1 then
printf('Server is launched successfully on port %u', port)
else
printf('Server listen failed, error message is %s', errorMessage)
return
end
local sockets = {server}
while true do
local results = socket.select(sockets)
for _, sock in ipairs(results) do
if sock == server then
local s = server:accept()
callback('Connected', s)
table.insert(sockets, s)
printf('%s connected', s:getsockname())
else
-- trying to detect socket is closed
if sock:isClosed() then
callback('Disconnected', sock)
for i, s in ipairs(sockets) do
if s == sock then
table.remove(sockets, i)
break
end
end
printf('%s disconnected', sock:getsockname())
else
callback('ReadyRead', sock)
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
除了尝试从中读取数据(调用它时它将返回 nil 和字符串“close”)。
我不知道还有其他方法。为什么检查读取套接字的结果对您不起作用?
您需要使用 settimeout 使调用非阻塞并检查closed(not close) 返回的错误。您可以读取一个字节并将其存储,也可以尝试读取零个字节。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |