Ejemplo n.º 1
0
int
main(int argc, const char *argv[])
{
    int serverfd = udp_server_socket("127.0.0.1", 8900);

    if (serverfd < 0)
    {
        perror("Socket:");
        printf("%s:%d\n", "create server failed.", errno);
    }
    else
    {
        printf("%s\n", "create  server success.");
    }

    event_init();

    struct event ev_listen;
    
    event_set(&ev_listen, serverfd, EV_READ|EV_PERSIST, on_data_arrived, NULL);
    event_add(&ev_listen, NULL);

    event_dispatch();

    return 0;
}
Ejemplo n.º 2
0
/**
unsigned short  get_valid_rtp_pair_sockets(int min, int max, int* rtp, int* rtcp)

min〜max でランダムなポート番号を持った RTPとRTCPのソケットを生成する.

@param  min  使用可能なポート番号の最小値
@param  max  使用可能なポート番号の最大値
@param  rtp  RTP のソケット番号が入る.
@param  rtcp RTCPのソケット番号が入る.

@return RTPのポート番号(偶数).RTCPのポート番号は + 1 する.
*/
unsigned short  get_valid_rtp_pair_sockets(int min, int max, int* rtp, int* rtcp)
{
	int  i = 1;
	int  range, sock1, sock2, port;

	max = max - 1;
	min = min + 1;

	range = max - min + 1;
	port  = ((rand()%range + min)/2)*2;

	sock1 = udp_server_socket(port);			// RTP
	sock2 = udp_server_socket(port+1);			// RTCP
	if (sock1<=0 || sock2<=0) {
		if (sock1>0) socket_close(sock1);
		if (sock2>0) socket_close(sock2);
		sock1 = sock2 = 0;
	}

	while(sock1==0 && i<range) {
		port = port + 2;
		if (port>max) port = ((port%max + min - 1)/2)*2;

		sock1 = udp_server_socket(port);		// RTP
		sock2 = udp_server_socket(port+1);		// RTCP
		if (sock1<=0 || sock2<=0) {
			if (sock1>0) socket_close(sock1);
			if (sock2>0) socket_close(sock2);
			sock1 = sock2 = 0;
		}
		i = i + 2;
	}

	if (sock1==0) {
		port = 0;
		*rtp = *rtcp =0;
	}
	else {
		*rtp  = sock1;
		*rtcp = sock2;
	}
	
	return (unsigned short)port;
}