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; }
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; }