Exemple #1
0
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;
}
Exemple #2
0
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);
    
     
}
Exemple #3
0
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;
}