亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? listen.c

?? Red-Button
?? C
字號(hào):
/* * listen.c */#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <signal.h>#include <stdbool.h>#include <errno.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/wait.h>#include "command.h"#include "utils.h"/* listen() backlog, 5 is max for BSD apparently */#define BACKLOG		5/* internal functions */static int get_host_addr(char *, struct in_addr *);static void handle_connection(struct listen_data *, int, struct sockaddr_in *);static void dead_child(int);/* * extract the IP addr and port number from a string in one of these forms: * host:port * ip-addr:port * host * ip-addr * port * if the string is NULL, or the host or the port are not defined in the string, * the corresponding param passed to this routine is not changed * ip and port are both returned in network byte order * returns -1 on error (can't resolve host name) */intparse_addr(char *str, struct in_addr *ip, in_port_t *port){	char *p;	int ishost;	/* easy case */	if(str == NULL)		return 0;	if((p = strchr(str, ':')) != NULL)	{		/* its either host:port or ip:port */		*(p++) = '\0';		if(get_host_addr(str, ip) < 0)			return -1;		*port = htons(atoi(p));		/* reconstruct the string */		*(--p) = ':';	}	else	{		/* its either host, ip, or port */		/* all digits => a port number */		ishost = 0;		for(p=str; *p && !ishost; p++)			ishost = !isdigit(*p);		if(ishost)		{			if(get_host_addr(str, ip) < 0)				return -1;		}		else		{			*port = htons(atoi(str));		}	}	return 0;}/* * puts the IP address associated with the given host into output buffer * host can be a.b.c.d or a host name * returns 0 if successful, -1 on error */static intget_host_addr(char *host, struct in_addr *output){	struct hostent *he;	int error = 0;	if(((he = gethostbyname(host)) != NULL) && (he->h_addrtype == AF_INET))		memcpy(output, he->h_addr, sizeof(struct in_addr));	else		error = -1;	return error;}/* * start a process to listen on the given interface for commands from a remote rb-browser */voidstart_listener(struct listen_data *listen_data){	struct sigaction action;	pid_t child;	int sockopt;	int listen_sock;	int accept_sock;	fd_set read_fds;	socklen_t addr_len;	struct sockaddr_in client_addr;	/*	 * fork:	 * the parent listens for commands,	 * the child returns and downloads the carousel	 */	/* don't let our children become zombies */	action.sa_handler = dead_child;	sigemptyset(&action.sa_mask);	action.sa_flags = 0;	if(sigaction(SIGCHLD, &action, NULL) < 0)		fatal("signal: SIGCHLD: %s", strerror(errno));	/* if we can't fork it's probably best to kill ourselves*/	if((child = fork()) < 0)		fatal("fork: %s", strerror(errno));	/* child returns */	else if(child == 0)		return;	/* parent continues */	/* listen on the given ip:port */	verbose("Listening on %s:%u", inet_ntoa(listen_data->addr.sin_addr), ntohs(listen_data->addr.sin_port));	if((listen_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)		fatal("socket: %s", strerror(errno));	/* in case someones already using it */	sockopt = 1;	if(setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(sockopt)) < 0)		fatal("setsockopt: SO_REUSEADDR: %s", strerror(errno));	if(bind(listen_sock, (struct sockaddr *) &listen_data->addr, sizeof(struct sockaddr_in)) < 0)		fatal("bind: %s", strerror(errno));	if(listen(listen_sock, BACKLOG) < 0)		fatal("listen: %s", strerror(errno));	/* listen for connections */	while(true)	{		FD_ZERO(&read_fds);		FD_SET(listen_sock, &read_fds);		if(select(listen_sock + 1, &read_fds, NULL, NULL, NULL) < 0)		{			/* could have been interupted by SIGCHLD */			if(errno != EINTR)				error("select: %s", strerror(errno));			continue;		}		/* check select didnt fuck up */		if(!FD_ISSET(listen_sock, &read_fds))			continue;		addr_len = sizeof(client_addr);		if((accept_sock = accept(listen_sock, (struct sockaddr *) &client_addr, &addr_len)) < 0)		{			/* we get ECONNABORTED in Linux if we're being SYN scanned */			error("accept: %s", strerror(errno));			continue;		}		/* fork off a child to handle it */		if((child = fork()) < 0)		{			/* if we can't fork it's probably best to kill ourselves*/			fatal("fork: %s", strerror(errno));		}		else if(child == 0)		{			/* child */			close(listen_sock);			handle_connection(listen_data, accept_sock, &client_addr);			close(accept_sock);			/* use _exit in child so stdio etc don't clean up twice */			_exit(EXIT_SUCCESS);		}		else		{			/* parent */			close(accept_sock);		}	}	/* we never get here */	close(listen_sock);	return;}/* * handle a connection from a remote rb-browser */static voidhandle_connection(struct listen_data *listen_data, int client_sock, struct sockaddr_in *client_addr){	FILE *client;	char cmd[1024];	size_t len;	bool quit;	verbose("Connection from %s:%d", inet_ntoa(client_addr->sin_addr), ntohs(client_addr->sin_port));	if((client = fdopen(client_sock, "r+")) == NULL)		return;	/* read commands from the client */	quit = false;	while(!feof(client) && !quit)	{		if(fgets(cmd, sizeof(cmd), client) == NULL)		{			quit = true;		}		else		{			/* strip off any trailing \n */			len = strlen(cmd);			len = (len > 0) ? len - 1 : len;			while(len > 0 && (cmd[len] == '\n' || cmd[len] == '\r'))				cmd[len--] = '\0';			/* process the command */			quit = process_command(listen_data, client, cmd);		}	}	fclose(client);	verbose("Connection from %s:%d closed", inet_ntoa(client_addr->sin_addr), ntohs(client_addr->sin_port));	return;}static voiddead_child(int signo){	if(signo == SIGCHLD)		wait(NULL);	return;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美激情插| 欧美性高清videossexo| 夜色激情一区二区| 国产精品福利在线播放| 精品美女一区二区三区| 91精品国产aⅴ一区二区| 欧美日本不卡视频| 欧美精品在线一区二区| 在线免费精品视频| 色综合视频在线观看| 久久66热偷产精品| 国产美女一区二区三区| 青青草精品视频| 国产一区欧美二区| 成人性生交大片免费看中文 | 亚洲另类中文字| 成人欧美一区二区三区视频网页| 亚洲色图一区二区| 天天射综合影视| 激情欧美一区二区三区在线观看| 国产精品一色哟哟哟| 99热这里都是精品| 色婷婷av一区二区三区gif| 欧美一区二区日韩| 国产精品你懂的在线| 亚洲综合无码一区二区| 美腿丝袜亚洲一区| 成人一道本在线| 欧美日韩美女一区二区| 日韩欧美国产三级| 国产亚洲精品精华液| 亚洲免费在线电影| 日本欧美一区二区三区| 成人一道本在线| 欧美高清精品3d| 国产精品国产自产拍在线| 一区二区在线观看免费| 国产精品一区二区在线观看不卡| 欧美无人高清视频在线观看| 久久天堂av综合合色蜜桃网| 亚洲国产日韩在线一区模特| 精品亚洲porn| 欧美四级电影在线观看| 国产精品欧美综合在线| 日韩成人一级大片| 色噜噜久久综合| 国产日韩欧美制服另类| 人人精品人人爱| 色婷婷综合久久久久中文 | 国产高清久久久| 欧美最猛黑人xxxxx猛交| 久久久国产一区二区三区四区小说| 亚洲一区av在线| 成人污视频在线观看| 日韩视频在线观看一区二区| 夜夜嗨av一区二区三区网页| 成人网男人的天堂| 久久影院视频免费| 免费xxxx性欧美18vr| 欧美视频一区二区三区在线观看| 国产精品欧美极品| 国产另类ts人妖一区二区| 日韩午夜小视频| 日韩经典中文字幕一区| www.在线成人| 国产欧美精品区一区二区三区| 婷婷成人激情在线网| 欧美性猛片aaaaaaa做受| 亚洲蜜臀av乱码久久精品| 丁香婷婷综合色啪| 国产精品日韩精品欧美在线| 国产精品 欧美精品| 久久久久久一级片| 国产高清在线精品| 中文字幕 久热精品 视频在线| 国产一区二区在线电影| 久久在线免费观看| 国产成人精品1024| 国产精品福利影院| 91色视频在线| 亚洲国产日韩一区二区| 欧美一区二区三区精品| 男女视频一区二区| 精品裸体舞一区二区三区| 国产精品一区在线观看你懂的| 久久久久久97三级| 成人一二三区视频| 亚洲已满18点击进入久久| 在线视频国产一区| 日韩黄色一级片| 日韩欧美在线不卡| 国产99久久久国产精品潘金| 久久久综合精品| 国产在线不卡一卡二卡三卡四卡| 久久久91精品国产一区二区精品| av毛片久久久久**hd| 亚洲一区二区三区视频在线| 欧美一区二区啪啪| 国产成人午夜精品5599| 亚洲精品国产一区二区精华液| 精品国产乱码久久久久久蜜臀| 在线观看视频一区二区欧美日韩 | 日韩成人av影视| 69p69国产精品| 国产老妇另类xxxxx| 国产精品天干天干在线综合| 国产一区二区三区日韩| 最新不卡av在线| 欧美在线free| 麻豆视频一区二区| 国产精品午夜在线| 777亚洲妇女| 成人精品视频一区二区三区尤物| 亚洲超碰精品一区二区| 欧美一区二区三区四区五区 | 99久久综合色| 亚洲国产精品久久艾草纯爱| 欧美精品一区二区三区四区| 日本福利一区二区| 国内精品视频666| 亚洲裸体在线观看| 精品福利视频一区二区三区| 色伊人久久综合中文字幕| 精品中文字幕一区二区| 伊人一区二区三区| 国产三级一区二区三区| 6080亚洲精品一区二区| 国产成人精品免费看| 日本免费在线视频不卡一不卡二| 国产精品久久综合| 欧美一区二区三区四区在线观看| 91小视频免费看| 国内欧美视频一区二区| 亚洲成人综合网站| 国产欧美精品一区| 久久久99久久| 久久蜜桃av一区二区天堂| 制服丝袜av成人在线看| 欧美优质美女网站| 91丝袜呻吟高潮美腿白嫩在线观看| 国内精品国产成人国产三级粉色| 亚洲国产成人tv| 日韩欧美一区在线观看| 91在线观看高清| 99久久免费视频.com| 国产精品99久久久久久久女警 | 日韩精品中午字幕| caoporen国产精品视频| 久久机这里只有精品| 日本成人在线视频网站| 五月天国产精品| 日本vs亚洲vs韩国一区三区| 亚洲制服丝袜av| 一区二区三区不卡在线观看| 成人欧美一区二区三区小说| 国产精品每日更新| 亚洲柠檬福利资源导航| 亚洲男女一区二区三区| 亚洲影视在线播放| 亚洲国产视频在线| 日韩成人免费电影| 男男gaygay亚洲| 久久99久久久久久久久久久| 日本色综合中文字幕| 精品一区二区综合| 国产在线视频精品一区| 国产麻豆精品在线| www.日韩av| 欧美性生活久久| 日韩一区二区视频| 久久久久久久久久久久久久久99| 精品国产免费人成在线观看| 国产欧美一区二区三区在线老狼| 国产精品沙发午睡系列990531| 国产精品情趣视频| 亚洲五码中文字幕| 狠狠久久亚洲欧美| 91蜜桃视频在线| 欧美一卡二卡三卡四卡| 国产视频一区二区在线| 亚洲免费伊人电影| 久久草av在线| 91免费视频观看| 日韩亚洲欧美综合| 中文字幕一区二区在线观看| 午夜免费久久看| 国产成人aaaa| 欧美精品vⅰdeose4hd| 久久久久久亚洲综合影院红桃| 亚洲精选视频在线| 久久99久久99| 欧美亚洲高清一区| 国产日韩欧美一区二区三区乱码 | 久久久不卡影院| 亚洲综合色区另类av| 精品一二三四区| 色视频欧美一区二区三区| 久久影院午夜片一区| 视频在线观看91| 色综合天天综合色综合av |