Example #1
0
static int lluv_udp_try_send(lua_State *L) {
    lluv_handle_t *handle = lluv_check_udp(L, 1, LLUV_FLAG_OPEN);
    struct sockaddr_storage sa;
    int err = lluv_check_addr(L, 2, &sa);
    size_t len;
    const char *str = luaL_checklstring(L, 4, &len);
    uv_buf_t buf = uv_buf_init((char*)str, len);

    if(err < 0) {
        lua_settop(L, 3);
        lua_pushliteral(L, ":");
        lua_insert(L, -2);
        lua_concat(L, 3);
        return lluv_fail(L, handle->flags, LLUV_ERR_UV, err, lua_tostring(L, -1));
    }

    lluv_check_none(L, 3);

    err = uv_udp_try_send(LLUV_H(handle, uv_udp_t), &buf, 1, (struct sockaddr*)&sa);
    if(err < 0) {
        return lluv_fail(L, handle->flags, LLUV_ERR_UV, err, NULL);
    }

    lua_pushinteger(L, err);
    return 1;
}
Example #2
0
File: udp.c Project: luvit/luv
static int luv_udp_try_send(lua_State* L) {
    uv_udp_t* handle = luv_check_udp(L, 1);
    uv_buf_t buf;
    int ret, port;
    const char* host;
    struct sockaddr_storage addr;
    luv_check_buf(L, 2, &buf);
    host = luaL_checkstring(L, 3);
    port = luaL_checkinteger(L, 4);
    if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
            uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
        return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
    }
    ret = uv_udp_try_send(handle, &buf, 1, (struct sockaddr*)&addr);
    if (ret < 0) return luv_error(L, ret);
    lua_pushinteger(L, ret);
    return 1;
}