Networking luasocket';什么是settimeout()工作?

Networking luasocket';什么是settimeout()工作?,networking,tcp,lua,love2d,Networking,Tcp,Lua,Love2d,我有以下代码: function Server:run() print("Running.") self.running = true while self.running do if self.client == nil then self.client = self.socket:accept() print("Client connected.") self.client:set

我有以下代码:

function Server:run()
    print("Running.")
    self.running = true
    while self.running do
        if self.client == nil then
            self.client = self.socket:accept()
            print("Client connected.")
            self.client:settimeout(10)
        end
        local line, err = self.client:receive()
        if err then
            print("Error: " .. err)
        elseif line == "quit" then
            print("Quitting.")
            self.client:close()
            self.running = false        
        else
            print("Received: " .. line)
        end
    end
    self:terminate()
end
我希望在调用self.client:receive()时,服务器将等待10秒或直到收到消息,然后继续运行

然而,这不是我所经历的行为。相反,无论超时设置为什么值,服务器都会立即生成超时错误,并且根本不等待来自客户端的消息

我怀疑我误解了什么。任何洞察都将被告知。谢谢


完整代码如下:

服务器:

主要内容:



代码按预期为我工作(Windows、LuaJIT 2.0.2、luasocket 3.0-rc1);我在以下独立脚本上进行了测试:

local socket = require "socket"
local server = assert(socket.bind("*", 3333))
local client = server:accept()
print("accepted connection; waiting for data...")
client:settimeout(10)
local start = os.time()
local line, err, partial = client:receive("*l")
if line then
  print(("received '%s'; echoing back..."):format(line))
  client:send(line.."\n")
else
  print(("received error '%s' after %.2f seconds."):format(err, os.time()-start))
end
client:close()
您可以运行telnet localhost 3333,应该看到“已接受的连接;正在等待数据…”;如果我不发送任何东西,我会得到“10.00秒后收到的错误‘超时’”,这正是我所期望的

我会检查是否存在逻辑错误,并且在您的情况下,
self.client
永远不会
nil
,并且您不会调用
settimeout
。如果这仍然没有帮助,那么制作一个我们可以使用love2d运行的独立示例(例如,我看不出您在哪里调用
bind