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