WSAEWOULDBLOCK 10035

我正尝试建立客户端与服务器的连接,但我对套接字等不熟悉,所以我使用了 luajitsocket 的 Github 示例,但我收到了错误信息“无法立即完成非阻塞套接字操作。”

因此,我甚至不知道该如何解决这个问题,这就是为什么我在这里提出了问题。

我的代码:

local port = 8080
local address = socket.find_first_address("*", port)

do -- 服务器
    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 -- 客户端
    local client = assert(socket.create("inet", "dgram", "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

我在谷歌上搜索这个错误,但找不到任何可行的解决方案。先行致谢!

点赞
用户103167
用户103167

在执行 set_blocking(false) 后,返回值不应被视为异常。

你可能是从 receive_from() 得到了这个返回值,但你不应该不停地调用它,你应该在 select()poll() 告诉你有数据等待时才调用它。

2020-10-29 20:54:08