CAMLprim value uwt_udp_set_membership_na(value o_udp, value o_mul, value o_int, value o_mem) { HANDLE_INIT_NA(u, o_udp); /* uninit allowed, will trigger implicit binding */ uv_membership membership = Long_val(o_mem) ? UV_JOIN_GROUP : UV_LEAVE_GROUP; const char* multicast_addr = String_val(o_mul); char* interface_addr = NULL; if ( !uwt_is_safe_string(o_mul) ){ return VAL_UWT_INT_RESULT_ECHARSET; } if ( o_int != Val_unit ){ value s = Field(o_int,0); if ( !uwt_is_safe_string(s) ){ return VAL_UWT_INT_RESULT_ECHARSET; } interface_addr = String_val(s); } int ret = uv_udp_set_membership((uv_udp_t*)u->handle, multicast_addr, interface_addr, membership); if ( ret >= 0 ){ u->initialized = 1; } return (VAL_UWT_UNIT_RESULT(ret)); }
static int luv_udp_set_membership(lua_State* L) { uv_udp_t* handle = luv_check_udp(L, 1); const char* multicast_addr = luaL_checkstring(L, 2); const char* interface_addr = luaL_checkstring(L, 3); uv_membership membership = (uv_membership)luaL_checkoption(L, 4, NULL, luv_membership_opts); int ret = uv_udp_set_membership(handle, multicast_addr, interface_addr, membership); if (ret < 0) return luv_error(L, ret); lua_pushinteger(L, ret); return 1; }
/* const char* interface_addr, uv_membership membership);*/ int luv_udp_set_membership(lua_State* L) { uv_udp_t* handle = (uv_udp_t*)luv_checkudata(L, 1, "udp"); const char* multicast_addr = luaL_checkstring(L, 2); const char* interface_addr = luaL_checkstring(L, 3); int option = luaL_checkoption (L, 4, "membership", luv_membership_options); uv_membership membership = option ? UV_LEAVE_GROUP : UV_JOIN_GROUP; if (uv_udp_set_membership(handle, multicast_addr, interface_addr, membership)) { uv_err_t err = uv_last_error(luv_get_loop(L)); return luaL_error(L, "udp_set_membership: %s", uv_strerror(err)); } return 0; }
/* * Class: com_oracle_libuv_handles_UDPHandle * Method: _set_membership * Signature: (JLjava/lang/String;Ljava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_com_oracle_libuv_handles_UDPHandle__1set_1membership (JNIEnv *env, jobject that, jlong udp, jstring multicastAddress, jstring interfaceAddress, jint membership) { assert(udp); uv_udp_t* handle = reinterpret_cast<uv_udp_t*>(udp); const char* maddr = env->GetStringUTFChars(multicastAddress, 0); const char* iaddr = env->GetStringUTFChars(interfaceAddress, 0); int r = uv_udp_set_membership(handle, maddr, iaddr, static_cast<uv_membership>(membership)); env->ReleaseStringUTFChars(multicastAddress, maddr); env->ReleaseStringUTFChars(interfaceAddress, iaddr); if (r) { ThrowException(env, handle->loop, "uv_udp_set_membership"); } return r; }
static int lluv_udp_set_membership(lua_State *L){ static const lluv_uv_const_t FLAGS[] = { { UV_LEAVE_GROUP, "leave" }, { UV_JOIN_GROUP, "join" }, { 0, NULL } }; lluv_handle_t *handle = lluv_check_udp(L, 1, LLUV_FLAG_OPEN); const char *multicast_addr = luaL_checkstring(L, 2); const char *interface_addr = luaL_checkstring(L, 3); uv_membership membership = (uv_membership)lluv_opt_named_const(L, 4, UV_JOIN_GROUP, FLAGS); int err = uv_udp_set_membership(LLUV_H(handle, uv_udp_t), multicast_addr, interface_addr, membership); if(err < 0){ return lluv_fail(L, handle->flags, LLUV_ERR_UV, err, NULL); } lua_settop(L, 1); return 1; }
static PyObject * UDP_func_set_membership(UDP *self, PyObject *args) { int r, membership; char *multicast_address, *interface_address; interface_address = NULL; RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); if (!PyArg_ParseTuple(args, "si|s:set_membership", &multicast_address, &membership, &interface_address)) { return NULL; } r = uv_udp_set_membership((uv_udp_t *)UV_HANDLE(self), multicast_address, interface_address, membership); if (r != 0) { RAISE_UV_EXCEPTION(UV_HANDLE_LOOP(self), PyExc_UDPError); return NULL; } Py_RETURN_NONE; }
static PyObject * UDP_func_set_membership(UDP *self, PyObject *args) { int err, membership; char *multicast_address, *interface_address; interface_address = NULL; RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL); RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); if (!PyArg_ParseTuple(args, "si|s:set_membership", &multicast_address, &membership, &interface_address)) { return NULL; } err = uv_udp_set_membership(&self->udp_h, multicast_address, interface_address, membership); if (err < 0) { RAISE_UV_EXCEPTION(err, PyExc_UDPError); return NULL; } Py_RETURN_NONE; }
int UvUdpSocket::leaveMuticastGroup(string muticastAddr,string interfaceAddr) { return uv_udp_set_membership(m_uv_udp, muticastAddr.c_str(), interfaceAddr.c_str(), UV_LEAVE_GROUP); }
int main(int argc, char *argv[]) { helix_session_t session; struct sockaddr_in addr; helix_protocol_t proto; struct config cfg = {}; uv_udp_t socket; int err; program = basename(argv[0]); parse_options(&cfg, argc, argv); if (!cfg.symbol) { fprintf(stderr, "error: symbol is not specified. Use the '-s' option to specify it.\n"); exit(1); } if (!cfg.multicast_proto) { fprintf(stderr, "error: multicast protocol is not specified. Use the '-c' option to specify it.\n"); exit(1); } if (!cfg.multicast_addr) { fprintf(stderr, "error: multicast address is not specified. Use the '-a' option to specify it.\n"); exit(1); } if (!cfg.multicast_port) { fprintf(stderr, "error: multicast port is not specified. Use the '-p' option to specify it.\n"); exit(1); } if (!strcmp(cfg.format, "pretty")) { fmt_ops = &fmt_pretty_ops; } else if (!strcmp(cfg.format, "csv")) { fmt_ops = &fmt_csv_ops; } else { fprintf(stderr, "error: %s: unsupported format\n", cfg.format); exit(1); } if (cfg.output) { output = fopen(cfg.output, "w"); if (!output) { fprintf(stderr, "error: %s: %s\n", cfg.output, strerror(errno)); exit(1); } } else { output = stdout; } proto = helix_protocol_lookup(cfg.multicast_proto); if (!proto) { fprintf(stderr, "error: protocol '%s' is not supported\n", cfg.multicast_proto); exit(1); } session = helix_session_create(proto, cfg.symbol, process_ob_event, process_trade_event, NULL); if (!session) { fprintf(stderr, "error: unable to create new session\n"); exit(1); } err = uv_udp_init(uv_default_loop(), &socket); if (err) { libuv_error("uv_udp_init", err); } socket.data = session; err = uv_ip4_addr("0.0.0.0", cfg.multicast_port, &addr); if (err) { libuv_error("uv_ip4_addr", err); } err = uv_udp_bind(&socket, (const struct sockaddr *)&addr, UV_UDP_REUSEADDR); if (err) { libuv_error("uv_udp_bind", err); } err = uv_udp_set_membership(&socket, cfg.multicast_addr, NULL, UV_JOIN_GROUP); if (err) { libuv_error("uv_udp_set_membership", err); } err = uv_udp_recv_start(&socket, alloc_packet, recv_packet); if (err) { libuv_error("uv_udp_recv_start", err); } fmt_ops->fmt_header(); uv_run(uv_default_loop(), UV_RUN_DEFAULT); }
extern "C" int rust_uv_udp_set_membership (uv_udp_t* handle, const char* m_addr, const char* i_addr, uv_membership membership) { return uv_udp_set_membership(handle, m_addr, i_addr, membership); }
int main(int argc, char *argv[]) { helix_session_t session; struct sockaddr_in addr; helix_protocol_t proto; struct config cfg = {}; uv_udp_t socket; int err; program = basename(argv[0]); parse_options(&cfg, argc, argv); if (!cfg.symbol) { fprintf(stderr, "error: symbol is not specified. Use the '-s' option to specify it.\n"); exit(1); } if (!cfg.proto) { fprintf(stderr, "error: multicast protocol is not specified. Use the '-P' option to specify it.\n"); exit(1); } if (!cfg.multicast_addr) { fprintf(stderr, "error: multicast address is not specified. Use the '-a' option to specify it.\n"); exit(1); } if (!cfg.multicast_port) { fprintf(stderr, "error: multicast port is not specified. Use the '-p' option to specify it.\n"); exit(1); } proto = helix_protocol_lookup(cfg.proto); if (!proto) { fprintf(stderr, "error: protocol '%s' is not supported\n", cfg.proto); exit(1); } session = helix_session_create(proto, process_ob_event, process_trade_event, NULL); if (!session) { fprintf(stderr, "error: unable to create new session\n"); exit(1); } helix_session_subscribe(session, cfg.symbol, cfg.max_orders); err = uv_udp_init(uv_default_loop(), &socket); if (err) { libuv_error("uv_udp_init", err); } socket.data = session; err = uv_ip4_addr("0.0.0.0", cfg.multicast_port, &addr); if (err) { libuv_error("uv_ip4_addr", err); } err = uv_udp_bind(&socket, (const struct sockaddr *)&addr, UV_UDP_REUSEADDR); if (err) { libuv_error("uv_udp_bind", err); } err = uv_udp_set_membership(&socket, cfg.multicast_addr, NULL, UV_JOIN_GROUP); if (err) { libuv_error("uv_udp_set_membership", err); } err = uv_udp_recv_start(&socket, alloc_packet, recv_packet); if (err) { libuv_error("uv_udp_recv_start", err); } initscr(); clear(); refresh(); uv_run(uv_default_loop(), UV_RUN_DEFAULT); endwin(); return 0; }