gpt4 book ai didi

lua - 我如何使用 socket.select?

转载 作者:行者123 更新时间:2023-12-04 00:43:25 28 4
gpt4 key购买 nike

我需要一些使用套接字“选择”功能的帮助。

我的服务器代码是这样的:

while true do
for _,server in pairs(servers) do
local client = server:accept()

client:settimeout(5)

local line, err = client:receive()
if not err then
client:send(line .. "_SERVER_SIDE\n")
else
client:Send("___ERRORPC"..err)
end

client:close()
end
end

但现在我想使用 select 函数,而不是像这样做一个永远的循环。

正在阅读:http://w3.impa.br/~diego/software/luasocket/socket.html

我知道我可以使用类似的东西:

socket.select(servers, nil, 5)

但我不知道如何在上面的代码中使用它。谁能帮帮我?

我将不得不在 while true 语句中使用这个?

读操作(第一个参数)意味着我只能做一个accept/receive]?而seconds参数意味着我只能发送一次?

最佳答案

根据文档,select 接收一个或两个套接字数组并返回一个可以安全地读取而不会阻塞的套接字数组和一个可以安全写入而不会阻塞的套接字数组以及一个可以安全地写入而不会阻塞。重要的一点是,第一个数组用于要调用接受的服务器套接字和要调用接收的客户端套接字。

seconds 参数只是选择的超时时间。这与您可以进行多少次操作无关。

您必须在代码中更改的基本内容是,当接收调用因超时而失败时,您应该将该套接字添加到传递给 select 的套接字数组中,而不是给出错误。这样您就可以让 select 告诉您该套接字何时再次激活。

关于lua - 我如何使用 socket.select?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004612/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com