static __inline__ gint get_new_udp_sock(gint *port) { struct sockaddr_in sin; socklen_t len = sizeof(sin); gint sock, err; sock = unix_sock_bind(NULL, *port, L4_UDP); if (sock < 0) return sock; if (!*port) { if (getsockname(sock, (struct sockaddr*)&sin, &len)) { err = -errno; fnc_log(FNC_LOG_ERR, "[FC] getsockname() failed."); close(sock); return err; } *port = ntohs(sin.sin_port); } return sock; }
int32_t h6_listen_server_bind_port(h6_local_proxy_svr_t *svr, uint16_t port) { int32_t fd; fd = unix_sock_bind(L4_TCP, 0, htons(port), 0); if (fd < 0) { TRACE_ERROR("unix_sock_bind() failed, err:'%d' @ port(%u).", fd, port); return fd; } unix_sock_tcp_listen(fd); }
static __inline__ void jpf_service_connect(jpf_service *ps) { int32_t sock, err; struct sockaddr_in sin; client *c; tr_server *server; err = unix_resolve_host(&sin, ps->psp.ip, ps->psp.port); if (err) { LOG_W( "jpf_service_connect()->unix_resolve_host() failed, ip:%s.", ps->psp.ip ); goto __conn_err; } sock = unix_sock_bind(L4_TCP, 0, 0, 0); if (sock < 0) { LOG_W( "jpf_service_connect()->unix_sock_bind() failed." ); err = sock; goto __conn_err; } if (connect(sock, (struct sockaddr*)&sin, sizeof(sin)) < 0) { err = -errno; LOG_W( "jpf_service_connect()->connect() failed, err:'%d'.", err ); goto __conn_err; } c = rtsp_impl_ts_client_new(0, (void*)sock); if (!c) { LOG_W( "jpf_service_connect()->rtsp_impl_ts_client_new() failed." ); close(sock); err = -ENOMEM; goto __conn_err; } server = avs_get_server(); if (!server) { LOG_W( "jpf_service_connect()->avs_get_server() failed." ); client_kill_unref((client*)c); err = -EPERM; goto __conn_err; } client_attach(c, server->sched); ps->jpf_client = (rtsp_ts_client*)c; ps->ttl = 0; LOG_I( "Connect MDS '%s:%d' ok.", ps->psp.ip, ps->psp.port ); return; __conn_err: if (ps->psp.exp_notifier) { (*ps->psp.exp_notifier)(ps->psp.user_data, err); } return; }