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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? udp.c

?? 一個Windows下的Linux專用虛擬機
?? C
?? 第 1 頁 / 共 2 頁
字號:
      int lasterrno=errno;      closesocket(so->s);      so->s=-1;#ifdef _WIN32      WSASetLastError(lasterrno);#else      errno=lasterrno;#endif    } else {      /* success, insert in queue */      setsockopt(so->s,SOL_SOCKET,SO_RCVBUF,(char *)&max_rcvbuf_size,sizeof(int));      so->so_expire = curtime + SO_EXPIRE;      insque(so,&udb);    }  }  return(so->s);}voidudp_detach(so)	struct socket *so;{	closesocket(so->s);	/* if (so->so_m) m_free(so->so_m);    done by sofree */	sofree(so);}struct tos_t udptos[] = {	{0, 53, IPTOS_LOWDELAY, 0},			/* DNS */#ifdef EMULATE_TALK	{517, 517, IPTOS_LOWDELAY, EMU_TALK},	/* talk */	{518, 518, IPTOS_LOWDELAY, EMU_NTALK},	/* ntalk */#endif#ifdef EMULATE_CUSEEME	{0, 7648, IPTOS_LOWDELAY, EMU_CUSEEME},	/* Cu-Seeme */#endif	{0, 0, 0, 0}};u_int8_tudp_tos(so)	struct socket *so;{	int i = 0;		while(udptos[i].tos) {		if ((udptos[i].fport && ntohs(so->so_fport) == udptos[i].fport) ||		    (udptos[i].lport && ntohs(so->so_lport) == udptos[i].lport)) {		    	so->so_emu = udptos[i].emu;			return udptos[i].tos;		}		i++;	}		return 0;}#ifdef EMULATE_TALK#include "talkd.h"#endif/* * Here, talk/ytalk/ntalk requests must be emulated */voidudp_emu(so, m)	struct socket *so;	struct mbuf *m;{#if defined(EMULATE_TALK) || defined(EMULATE_CUSEEME)	struct sockaddr_in addr;        int addrlen = sizeof(addr);#endif#ifdef EMULATE_TALK	CTL_MSG_OLD *omsg;	CTL_MSG *nmsg;	char buff[sizeof(CTL_MSG)];	u_char type;	struct talk_request {	struct talk_request *next;	struct socket *udp_so;	struct socket *tcp_so;} *req;		static struct talk_request *req_tbl = 0;	#endif#ifdef EMULATE_TALKstruct cu_header {	uint16_t	d_family;		// destination family	uint16_t	d_port;			// destination port	uint32_t	d_addr;			// destination address	uint16_t	s_family;		// source family	uint16_t	s_port;			// source port	uint32_t	so_addr;		// source address	uint32_t	seqn;			// sequence number	uint16_t	message;		// message	uint16_t	data_type;		// data type	uint16_t	pkt_len;		// packet length} *cu_head;#endif	switch(so->so_emu) {#ifdef EMULATE_TALK	 case EMU_TALK:	 case EMU_NTALK:		/*		 * Talk emulation. We always change the ctl_addr to get		 * some answers from the daemon. When an ANNOUNCE comes,		 * we send LEAVE_INVITE to the local daemons. Also when a		 * DELETE comes, we send copies to the local daemons.		 */		if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)			return;		#define	IS_OLD	(so->so_emu == EMU_TALK)#define COPY_MSG(dest, src) { dest->type = src->type; \			      dest->id_num = src->id_num; \			      dest->pid = src->pid; \			      dest->addr = src->addr; \			      dest->ctl_addr = src->ctl_addr; \			      memcpy(&dest->l_name, &src->l_name, NAME_SIZE_OLD); \			      memcpy(&dest->r_name, &src->r_name, NAME_SIZE_OLD); \	         	      memcpy(&dest->r_tty, &src->r_tty, TTY_SIZE); }#define OTOSIN(ptr, field) ((struct sockaddr_in *)&ptr->field)/* old_sockaddr to sockaddr_in */		if (IS_OLD) {  		/* old talk */			omsg = mtod(m, CTL_MSG_OLD*);			nmsg = (CTL_MSG *) buff;			type = omsg->type;			OTOSIN(omsg, ctl_addr)->sin_port = addr.sin_port;			OTOSIN(omsg, ctl_addr)->sin_addr = our_addr;			strncpy(omsg->l_name, getlogin(), NAME_SIZE_OLD);		} else {		/* new talk */				omsg = (CTL_MSG_OLD *) buff;			nmsg = mtod(m, CTL_MSG *);			type = nmsg->type;			OTOSIN(nmsg, ctl_addr)->sin_port = addr.sin_port;			OTOSIN(nmsg, ctl_addr)->sin_addr = our_addr;			strncpy(nmsg->l_name, getlogin(), NAME_SIZE_OLD);		}				if (type == LOOK_UP) 			return;		/* for LOOK_UP this is enough */					if (IS_OLD) {		/* make a copy of the message */			COPY_MSG(nmsg, omsg);			nmsg->vers = 1;			nmsg->answer = 0;		} else			COPY_MSG(omsg, nmsg);		/*		 * If if is an ANNOUNCE message, we go through the		 * request table to see if a tcp port has already		 * been redirected for this socket. If not, we solisten()		 * a new socket and add this entry to the table.		 * The port number of the tcp socket and our IP		 * are put to the addr field of the message structures.		 * Then a LEAVE_INVITE is sent to both local daemon		 * ports, 517 and 518. This is why we have two copies		 * of the message, one in old talk and one in new talk		 * format.		 */ 		if (type == ANNOUNCE) {			int s;			u_short temp_port;						for(req = req_tbl; req; req = req->next)				if (so == req->udp_so)					break;  	/* found it */								if (!req) {	/* no entry for so, create new */				req = (struct talk_request *)					malloc(sizeof(struct talk_request));				req->udp_so = so;				req->tcp_so = solisten(0,							OTOSIN(omsg, addr)->sin_addr.s_addr,						OTOSIN(omsg, addr)->sin_port,					SS_FACCEPTONCE);				req->next = req_tbl;				req_tbl = req;			}									/* replace port number in addr field */			addrlen = sizeof(addr);			getsockname(req->tcp_so->s, 					(struct sockaddr *) &addr,					&addrlen);					OTOSIN(omsg, addr)->sin_port = addr.sin_port;			OTOSIN(omsg, addr)->sin_addr = our_addr;			OTOSIN(nmsg, addr)->sin_port = addr.sin_port;			OTOSIN(nmsg, addr)->sin_addr = our_addr;						/* send LEAVE_INVITEs */			temp_port = OTOSIN(omsg, ctl_addr)->sin_port;			OTOSIN(omsg, ctl_addr)->sin_port = 0;			OTOSIN(nmsg, ctl_addr)->sin_port = 0;			omsg->type = nmsg->type = LEAVE_INVITE;									s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);			addr.sin_addr = our_addr;			addr.sin_family = AF_INET;			addr.sin_port = htons(517);			sendto(s, (char *)omsg, sizeof(*omsg), 0, 				(struct sockaddr *)&addr, sizeof(addr));			addr.sin_port = htons(518);			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,				(struct sockaddr *) &addr, sizeof(addr));			closesocket(s) ;			omsg->type = nmsg->type = ANNOUNCE; 			OTOSIN(omsg, ctl_addr)->sin_port = temp_port;			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;		}				/*			 * If it is a DELETE message, we send a copy to the		 * local daemons. Then we delete the entry corresponding		 * to our socket from the request table.		 */				if (type == DELETE) {			struct talk_request *temp_req, *req_next;			int s;			u_short temp_port;						temp_port = OTOSIN(omsg, ctl_addr)->sin_port;			OTOSIN(omsg, ctl_addr)->sin_port = 0;			OTOSIN(nmsg, ctl_addr)->sin_port = 0;						s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);			addr.sin_addr = our_addr;			addr.sin_family = AF_INET;			addr.sin_port = htons(517);			sendto(s, (char *)omsg, sizeof(*omsg), 0,				(struct sockaddr *)&addr, sizeof(addr));			addr.sin_port = htons(518);			sendto(s, (char *)nmsg, sizeof(*nmsg), 0,				(struct sockaddr *)&addr, sizeof(addr));			closesocket(s);						OTOSIN(omsg, ctl_addr)->sin_port = temp_port;			OTOSIN(nmsg, ctl_addr)->sin_port = temp_port;			/* delete table entry */			if (so == req_tbl->udp_so) {				temp_req = req_tbl;				req_tbl = req_tbl->next;				free(temp_req);			} else {				temp_req = req_tbl;				for(req = req_tbl->next; req; req = req_next) {					req_next = req->next;					if (so == req->udp_so) {						temp_req->next = req_next;						free(req);						break;					} else {						temp_req = req;					}				}			}		}				return;		#endif		#ifdef EMULATE_CUSEEME	case EMU_CUSEEME:			/*		 * Cu-SeeMe emulation.		 * Hopefully the packet is more that 16 bytes long. We don't		 * do any other tests, just replace the address and port		 * fields.		 */ 		if (m->m_len >= sizeof (*cu_head)) {			if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0)				return;			cu_head = mtod(m, struct cu_header *);			cu_head->s_port = addr.sin_port;			cu_head->so_addr = our_addr.s_addr;		}				return;#endif	}}struct socket *udp_listen(port, laddr, lport, flags)	u_int port;	u_int32_t laddr;	u_int lport;	int flags;{	struct sockaddr_in addr;	struct socket *so;	socklen_t addrlen = sizeof(struct sockaddr_in), opt = 1;		if ((so = socreate()) == NULL) {		free(so);		return NULL;	}	so->s = socket(AF_INET,SOCK_DGRAM,0);	so->so_expire = curtime + SO_EXPIRE;	insque(so,&udb);	addr.sin_family = AF_INET;	addr.sin_addr.s_addr = INADDR_ANY;	addr.sin_port = port;	if (bind(so->s,(struct sockaddr *)&addr, addrlen) < 0) {		udp_detach(so);		return NULL;	}	setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));/*	setsockopt(so->s,SOL_SOCKET,SO_OOBINLINE,(char *)&opt,sizeof(int)); */	setsockopt(so->s,SOL_SOCKET,SO_RCVBUF,(char *)&max_rcvbuf_size,sizeof(int));		getsockname(so->s,(struct sockaddr *)&addr,&addrlen);	so->so_fport = addr.sin_port;	/* Translate connections from localhost to the alias hostname */	if (is_localhost(addr.sin_addr))	   so->so_faddr = alias_addr;	else	   so->so_faddr = addr.sin_addr;		so->so_lport = lport;	so->so_laddr.s_addr = laddr;	if (flags != SS_FACCEPTONCE)	   so->so_expire = 0;		so->so_state = SS_ISFCONNECTED;		return so;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产无套在线观| 色一情一乱一乱一91av| 国产高清亚洲一区| 欧美日韩性生活| 国产精品嫩草影院av蜜臀| 丝袜a∨在线一区二区三区不卡| 国产九色精品成人porny| 欧美日韩国产精品成人| 中文字幕色av一区二区三区| 国产美女精品一区二区三区| 欧美久久久久久久久久| 亚洲欧洲综合另类在线| 成人蜜臀av电影| 久久天天做天天爱综合色| 国产精品18久久久久| 欧美一区二区三区免费在线看 | www.久久久久久久久| 欧美一区二区免费| 午夜电影网亚洲视频| 91伊人久久大香线蕉| 国产精品女人毛片| 国产91精品一区二区麻豆亚洲| 精品国产不卡一区二区三区| 日欧美一区二区| 欧美三区在线观看| 亚洲第一二三四区| 欧美亚男人的天堂| 亚洲一区二区成人在线观看| 色中色一区二区| 亚洲靠逼com| 在线免费观看日本一区| 亚洲午夜免费福利视频| 欧美一a一片一级一片| 亚洲国产综合91精品麻豆| 欧美中文字幕一区| 亚洲电影欧美电影有声小说| 欧美日韩久久久久久| 视频在线观看91| 日韩精品在线一区| 九一久久久久久| 国产日韩亚洲欧美综合| 91丨porny丨国产| 亚洲一区二区在线视频| 欧美日韩国产123区| 日韩综合在线视频| 久久综合一区二区| 99久久婷婷国产精品综合| 亚洲综合成人网| 欧美一区二区三区视频免费 | 日韩精品一区二区三区视频播放 | 99麻豆久久久国产精品免费优播| 欧美国产日韩精品免费观看| 不卡欧美aaaaa| 亚洲一区二区三区在线看| 欧美日韩成人一区二区| 久久精品国产秦先生| 国产精品免费网站在线观看| 欧洲精品一区二区| 蜜臀av一区二区在线观看| 国产午夜精品久久久久久久 | 亚洲国产一区视频| 日韩欧美高清在线| 99久久久免费精品国产一区二区 | 亚洲欧美二区三区| 欧美日韩中文字幕一区二区| 久久精品国产一区二区| 国产精品乱码妇女bbbb| 欧美日韩国产高清一区二区三区| 国产乱国产乱300精品| 亚洲男同性恋视频| 欧美r级电影在线观看| 一本一道久久a久久精品| 精品一区在线看| 一区二区三区精密机械公司| www国产精品av| 欧美日韩在线电影| 成人影视亚洲图片在线| 婷婷丁香久久五月婷婷| 国产精品免费av| 日韩一级精品视频在线观看| 色天天综合久久久久综合片| 国产麻豆精品一区二区| 日日夜夜精品视频天天综合网| 中文字幕不卡在线观看| 欧美一区二区三区在线| 色天使色偷偷av一区二区| 国产精品996| 蜜臀av一区二区| 亚洲电影欧美电影有声小说| 最新热久久免费视频| 337p日本欧洲亚洲大胆色噜噜| 在线国产电影不卡| 91在线视频免费观看| 国产一区二区三区四| 美女网站一区二区| 亚欧色一区w666天堂| 亚洲乱码中文字幕| 国产精品入口麻豆九色| 欧美mv日韩mv国产网站app| 在线不卡中文字幕| 欧美性大战久久久| 色诱视频网站一区| 91丨九色丨蝌蚪富婆spa| 高清av一区二区| 欧美久久久久久久久久| 在线观看中文字幕不卡| 色视频成人在线观看免| 91网上在线视频| 91久久香蕉国产日韩欧美9色| 高清不卡一二三区| av在线不卡观看免费观看| 波多野结衣91| a级精品国产片在线观看| 成人午夜大片免费观看| 成人一区二区三区视频在线观看 | 欧美色区777第一页| 91黄色小视频| 欧美色爱综合网| 69堂精品视频| 欧美一区二区不卡视频| 精品国产乱码久久久久久影片| 精品动漫一区二区三区在线观看| 精品福利在线导航| 久久精品人人爽人人爽| 国产精品动漫网站| 亚洲一区二区三区四区不卡 | 亚洲免费看黄网站| 亚洲最新视频在线播放| 亚洲成av人片观看| 加勒比av一区二区| 国产成人精品影院| 91一区二区三区在线播放| 欧美日韩亚洲国产综合| 日韩一级完整毛片| 欧美—级在线免费片| 亚洲一区二区美女| 狠狠色狠狠色合久久伊人| 成人av在线电影| 欧美最新大片在线看| 欧美一区二区成人| 国产精品网站导航| 亚洲一区二区三区四区五区中文| 日韩国产欧美视频| 成人av小说网| 欧美日韩www| 国产精品美女久久久久久| 亚洲第一激情av| 国产999精品久久久久久绿帽| 欧美天堂一区二区三区| 亚洲精品一区二区三区四区高清| 欧美国产综合一区二区| 亚洲第四色夜色| 国产suv精品一区二区883| 在线中文字幕不卡| 久久久高清一区二区三区| 一区二区三区中文在线观看| 国产在线麻豆精品观看| 欧洲精品在线观看| 国产色一区二区| 天堂久久久久va久久久久| av亚洲精华国产精华精| 日韩欧美激情在线| 亚洲国产综合人成综合网站| 国产成人午夜片在线观看高清观看| 欧美性色黄大片手机版| 国产欧美一区二区三区在线看蜜臀| 亚洲第一成年网| heyzo一本久久综合| 精品国产一二三| 丝袜诱惑制服诱惑色一区在线观看 | 国产91丝袜在线播放九色| 欧美另类z0zxhd电影| 亚洲国产精品国自产拍av| 免费看欧美女人艹b| 91美女片黄在线| 中文一区一区三区高中清不卡| 久久国产生活片100| 精品婷婷伊人一区三区三| 18成人在线观看| av综合在线播放| 欧美国产国产综合| 国精产品一区一区三区mba桃花 | 久久99精品久久久久久动态图| 欧美日韩精品一区二区在线播放| 中文字幕在线一区| 国产精品一级在线| 精品免费国产一区二区三区四区| 亚洲乱码国产乱码精品精98午夜 | 国产一区二区美女诱惑| 91精品国产色综合久久不卡电影 | 中文字幕一区二区三中文字幕| 国产精品夜夜嗨| 久久久电影一区二区三区| 六月丁香婷婷久久| 欧美日产国产精品| 亚洲.国产.中文慕字在线| 欧美猛男男办公室激情| 亚洲va欧美va天堂v国产综合| 欧美日韩另类国产亚洲欧美一级| 亚洲一区在线电影|