"unconnected:sendto() " return 值是什么意思?

What does "unconnected:sendto() " return value mean?

LuaSocket 文档说:

unconnected:sendto(datagram, ip, port)

If successful, the method returns 1. In case of error, the method returns nil followed by an error message.

但我得到的值为 44 的 return 值是什么意思?

我的代码在这里:

local socket = require("socket")

udp = socket.udp()
udp:setsockname("*", 8080)

local msg = "Test"

m=assert(udp:sendto( msg, "228.192.1.1", 8080))
print(m)

仔细查看 udp.c 内部的 the source 以获取 sendo 方法

static int meth_sendto(lua_State *L) {
    p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1);
    size_t count, sent = 0;
    const char *data = luaL_checklstring(L, 2, &count);
    const char *ip = luaL_checkstring(L, 3);
    const char *port = luaL_checkstring(L, 4);
    p_timeout tm = &udp->tm;
    int err;
    struct addrinfo aihint;
    struct addrinfo *ai;
    memset(&aihint, 0, sizeof(aihint));
    aihint.ai_family = udp->family;
    aihint.ai_socktype = SOCK_DGRAM;
    aihint.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
    err = getaddrinfo(ip, port, &aihint, &ai);
    if (err) {
        lua_pushnil(L);
        lua_pushstring(L, gai_strerror(err));
        return 2;
    }
    timeout_markstart(tm);
    err = socket_sendto(&udp->sock, data, count, &sent, ai->ai_addr,
        (socklen_t) ai->ai_addrlen, tm);
    freeaddrinfo(ai);
    if (err != IO_DONE) {
        lua_pushnil(L);
        lua_pushstring(L, udp_strerror(err));
        return 2;
    }
    lua_pushnumber(L, (lua_Number) sent);
    return 1;
}

基本上,文档中的“returns 1”语句是错误的。代码中的return 1语句表示实际函数returns一个值,实际压入栈:

lua_pushnumber(L, (lua_Number) sent);

其中变量 sent 是在上面的几条语句中计算出来的(检查 socket_sendto 调用。

所以,返回的4正是发送的字节数

sendto returns number of bytes sent.