问题描述
我正在尝试建立客户端-服务器连接,我对套接字等一无所知。因此,我将github示例用于luajitsocket并收到错误消息“无法立即完成非阻塞套接字操作。”
我的代码:
local port = 8080
local address = socket.find_first_address("*",port)
do -- server
local server = assert(socket.create("inet","dgram","udp"))
assert(server:set_blocking(false))
assert(server:bind(address))
print("hosting at ",address:get_ip(),address:get_port())
function update_server()
local data,addr = server:receive_from()
if data then
print(data)
assert(server:send_to(addr,"hello from server " .. os.clock()))
elseif addr ~= "timeout" then
error(addr)-- here
end
end
end
do -- client
local client = assert(socket.create("inet","udp"))
assert(client:set_blocking(false))
local next_send = 0
function update_client()
if next_send < os.clock() then
assert(client:send_to(address,"hello from client " .. os.clock()))
next_send = os.clock() + math.random() + 0.5
end
local data,addr = client:receive_from(address)
if data then
print(data,addr:get_ip(),addr:get_port())
elseif addr ~= "timeout" then
error(addr)
end
end
end
while true do
update_server()
update_client()
end
摘自:https://github.com/CapsAdmin/luajitsocket/blob/master/examples/udp_client_server.lua
我正在Google上查找此错误,但是找不到任何有效的解决方案。预先感谢!
解决方法
在set_blocking(false)
之后,不应将返回代码视为异常。
您可能是从receive_from()
获取的,您不应该经常调用它,应该在select()
或poll()
告诉您套接字有数据等待时执行此操作。