Пример #1
0
int main()
{
	struct mlib_chn_st *listptr;
	int listsize;

	/*conf处理*/

	/*socket init*/

	/*获取频道列表信息(从medialib中)*/
	err = mlib_getchnlist(&listptr,&listsize);		
	if(err)
	{
		syslog();
	}

	/*创建thr_list*/
	err = thr_list_create();
	if()
	{

	}

	/*创建thr_channel*/
	/*1:200  100:200  4:200  200:200*/

	for(i = 0 ; i < listsize; i++)
		thr_channel_create();


	while(1)
		pause();

	exit(0);
}
Пример #2
0
int main(int argc, char **argv)
{
	struct mlib_chn_st *listptr;
	int listsize;
	int i, err;
	char buf[BUFSIZE];
	int len, ch;
	struct ip_mreqn req;

	/*conf处理*/
	while(1) {
		ch = getopt(argc, argv, "M:P:C:");
		if(ch < 0) {
			break;
		}
		switch(ch) {
			case 'M':
				server_conf.mgroup = optarg;
				break;
			case 'P':
				server_conf.rcvport = optarg;
				break;
			case 'C':
				server_conf.medpath = optarg;
			default:
				break;
		}
	}

	openlog("server", LOG_PID, LOG_DAEMON);
	//if(daemonize()) {
	//	syslog(LOG_ERR, "daemonize() is failed");
	//	exit(1);
	//}else
	//	syslog(LOG_INFO, "daemonize() is successed");

	/*socket init*/
	sd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sd < 0) {
		perror("socket()");
		exit(1);
	}

	inet_pton(AF_INET, server_conf.mgroup, &req.imr_multiaddr);
	inet_pton(AF_INET, "0.0.0.0", &req.imr_address);
	req.imr_ifindex = if_nametoindex("eth0");
	if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, &req, sizeof(req)) < 0) {
		perror("setsockopt()");
		exit(1);
	}

	raddr.sin_family = AF_INET;
	raddr.sin_port = htons(atoi(server_conf.rcvport));
	inet_pton(AF_INET, server_conf.mgroup, &raddr.sin_addr);

	/*获取频道列表信息(从medialib中)*/
	err = mlib_getchnlist(&listptr,&listsize);		
	for(i = 0; i < listsize; i++) {
		printf("%d: ", listptr[i].chnid);
		puts(listptr[i].desc);
	}
/*	if(err)
	{
		syslog();
	}*/

	/*创建thr_list*/
	err = thr_list_create(listptr, listsize);
	if(err < 0)
	{
		fprintf(stderr, "thr_list_create() is error\n");
		exit(1);
	}

	/*创建thr_channel*/
	/*1:200  100:200  4:200  200:200*/ 

	for(i = 1; i <= listsize; i++) {
		thr_channel_create(tid+i, (chnid_t)i);   //id会存在竞争
	}

	while(1)
		pause();
	
	thr_channel_destroyall(listsize);
	thr_list_destroy();
	mlib_freechnlist(&listptr, listsize);
	closelog();

	exit(0);
}
Пример #3
0
int main(int argc, char **argv)
{
	int i, c;
	int err;

	signal(SIGTERM, daemon_exit);
	signal(SIGINT, daemon_exit);
	signal(SIGQUIT, daemon_exit);

	openlog("netradio", LOG_PID|LOG_PERROR, LOG_DAEMON);

	/* initialize */
	while (1) {
		c = getopt(argc, argv, "M:P:D:FH");
		if (c < 0) {
			break;
		}

		switch (c) {
			case 'M':
				server_conf.mgroup = optarg;
				break;
			case 'P':
				server_conf.rcv_port = optarg;
				break;
			case 'D':
				server_conf.media_dir = optarg;
				break;
			case 'F':
				server_conf.runmode = run_foregound;

				break;
			case 'I':
				server_conf.ifname = optarg;
				break;
			case 'H':
				break;
			default:
				exit(0);
		}
	}

	if (server_conf.runmode == run_daemon) {
		daemonize();
	} else if (server_conf.runmode == run_foregound) {
		/* do nothing */
	} else {
		syslog(LOG_ERR, "Invalid server_conf.runmode.");
		exit(1);
	}

	socket_init();

	err = mlib_getchnlist(&list, &list_size);
	if (err) {
		syslog(LOG_ERR, "mlib_getchnlist(): %m");
		exit(1);
	}

	syslog(LOG_DEBUG, "get list success, list_size = %d", list_size);

	for (i = 0; i < list_size; ++i) {
		printf("CHN: %d %s", list[i].id, list[i].desc);
	}

	thr_list_create(list, list_size);

	for (i = 0; i < list_size; ++i) {
		thr_channel_create(list + i);
	}

	syslog(LOG_DEBUG, "%d channel thread created", i);

	while(1)
		pause();


	exit(0);
}