3
我有一个独立的lua脚本,它使用lua套接字通过TCP IP连接到服务器。它使用接收呼叫从该服务器接收数据。但是,当我尝试使用Ctrl + C停止它时,会发生以下两种情况之一:Lua套接字无法通过Ctrl + C正确停止
- 如果当前没有流量并且接收正在等待,则Ctrl + C将不起作用。该计划将继续运行,并将不得不被终止。
- 如果有流量,该项目将与下面的打印输出,并与插座仍处于打开状态,并与服务器不接受另一个连接退出:
lua: luaSocketTest.lua:15: interrupted!
stack traceback:
[C]: in function 'receive'
luaSocketTest.lua:15: in function 'doWork'
luaSocketTest.lua:22: in main chunk
[C]: ?
我试着用PCALL解决第二个方案中,没有成功。 pcall不返回,该进程仍然会抛出错误。
样品我的计划是如下:
local socket = require ("socket")
local ip = "localhost"
local port = 5003
function doWork()
print ("Starting socket: "..ip..":"..port)
client = assert(socket.connect(ip, port))
print ("Socket Accepted")
client:send("TEST TEST")
while 1 do
local byte, err = client:receive (1)
if not err then
print (byte)
end
end
end
while 1 do
local status = pcall(doWork())
print ("EXITED PCALL WITH STATUS: "..tostring(status))
if not status then client:close() end
end
您正在使用哪种操作系统? –
我认为这可以通过设置客户端超时为0,并定期检查新的数据到达套接字来避免。在睡眠期间,应该可以使用ctrl-c。 – jpjacobs
洛伦佐,使用Linux – elanamig