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

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

?? udp.c

?? 一個Windows下的Linux專用虛擬機(jī)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (c) 1982, 1986, 1988, 1990, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)udp_usrreq.c	8.4 (Berkeley) 1/21/94 * udp_usrreq.c,v 1.4 1994/10/02 17:48:45 phk Exp *//* * Changes and additions relating to SLiRP * Copyright (c) 1995 Danny Gasparovski. *  * Please read the file COPYRIGHT for the  * terms and conditions of the copyright. */#include "slirp.h"#include "ip_icmp.h"struct udpstat udpstat;struct socket udb;/* * UDP protocol implementation. * Per RFC 768, August, 1980. */#ifndef	COMPAT_42int	udpcksum = 1;#elseint	udpcksum = 0;		/* XXX */#endifstruct	socket *udp_last_so = &udb;/* incrase receive buffer (win32 default: 8k) */static const int max_rcvbuf_size = 32768;voidudp_init(){	udb.so_next = udb.so_prev = &udb;}/* m->m_data  points at ip packet header  * m->m_len   length ip packet  * ip->ip_len length data (IPDU) */voidudp_input(m, iphlen)	register struct mbuf *m;	int iphlen;{	register struct ip *ip;	register struct udphdr *uh;/*	struct mbuf *opts = 0;*/	int len;	struct ip save_ip; 	struct socket *so;		DEBUG_CALL("udp_input");	DEBUG_ARG("m = %lx", (long)m);	DEBUG_ARG("iphlen = %d", iphlen);		udpstat.udps_ipackets++;	/*	 * Strip IP options, if any; should skip this,	 * make available to user, and use on returned packets,	 * but we don't yet have a way to check the checksum	 * with options still present.	 */	if(iphlen > sizeof(struct ip)) {		ip_stripoptions(m, (struct mbuf *)0);		iphlen = sizeof(struct ip);	}	/*	 * Get IP and UDP header together in first mbuf.	 */	ip = mtod(m, struct ip *);	uh = (struct udphdr *)((caddr_t)ip + iphlen);	/*	 * Make mbuf data length reflect UDP length.	 * If not enough data to reflect UDP length, drop.	 */	len = ntohs((u_int16_t)uh->uh_ulen);	if (ip->ip_len != len) {		if (len > ip->ip_len) {			udpstat.udps_badlen++;			goto bad;		}		m_adj(m, len - ip->ip_len);		ip->ip_len = len;	}		/*	 * Save a copy of the IP header in case we want restore it	 * for sending an ICMP error message in response.	 */	save_ip = *ip; 	save_ip.ip_len+= iphlen;         /* tcp_input subtracts this */	/*	 * Checksum extended UDP header and data.	 */	if (udpcksum && uh->uh_sum) {	  ((struct ipovly *)ip)->ih_next = 0;	  ((struct ipovly *)ip)->ih_prev = 0;	  ((struct ipovly *)ip)->ih_x1 = 0;	  ((struct ipovly *)ip)->ih_len = uh->uh_ulen;	  /* keep uh_sum for ICMP reply	   * uh->uh_sum = cksum(m, len + sizeof (struct ip)); 	   * if (uh->uh_sum) { 	   */	  if(cksum(m, len + sizeof(struct ip))) {	    udpstat.udps_badsum++;	    goto bad;	  }	}        /*         *  handle DHCP/BOOTP         */        if (ntohs(uh->uh_dport) == BOOTP_SERVER) {            bootp_input(m);            goto bad;        }#ifdef EMULATE_TFTP_SERVER        /*         *  handle TFTP         */        if (ntohs(uh->uh_dport) == TFTP_SERVER) {            tftp_input(m);            goto bad;        }#endif	/*	 * Locate pcb for datagram.	 */	so = udp_last_so;	if (so->so_lport != uh->uh_sport ||	    so->so_laddr.s_addr != ip->ip_src.s_addr) {		struct socket *tmp;				for (tmp = udb.so_next; tmp != &udb; tmp = tmp->so_next) {			if (tmp->so_lport == uh->uh_sport &&			    tmp->so_laddr.s_addr == ip->ip_src.s_addr) {				so = tmp;				break;			}		}		if (tmp == &udb) {		  so = NULL;		} else {		  udpstat.udpps_pcbcachemiss++;		  udp_last_so = so;		}	}		if (so != NULL) {	  so->so_faddr = ip->ip_dst;	  so->so_fport = uh->uh_dport;	} else {	  /*	   * If there's no socket for this packet,	   * create one	   */	  if ((so = socreate()) == NULL) goto bad;	  if(udp_attach(so) == -1) {	    DEBUG_MISC((dfd," udp_attach errno = %d-%s\n", 			errno,strerror(errno)));	    sofree(so);	    goto bad;	  }	  	  /*	   * Setup fields	   */	  /* udp_last_so = so; */	  so->so_laddr = ip->ip_src;	  so->so_lport = uh->uh_sport;	  so->so_faddr = ip->ip_dst; /* XXX */	  so->so_fport = uh->uh_dport; /* XXX */	  	  if ((so->so_iptos = udp_tos(so)) == 0)	    so->so_iptos = ip->ip_tos;	  	  /*	   * XXXXX Here, check if it's in udpexec_list,	   * and if it is, do the fork_exec() etc.	   */	}	iphlen += sizeof(struct udphdr);	m->m_len -= iphlen;	m->m_data += iphlen;	/*	 * Now we sendto() the packet.	 */	if (so->so_emu)	   udp_emu(so, m);	if(sosendto(so,m) == -1) {	  m->m_len += iphlen;	  m->m_data -= iphlen;	  *ip=save_ip;	  DEBUG_MISC((dfd,"udp tx errno = %d-%s\n",errno,strerror(errno)));	  icmp_error(m, ICMP_UNREACH,ICMP_UNREACH_NET, 0,strerror(errno));  	}	m_free(so->so_m);   /* used for ICMP if error on sorecvfrom */	/* restore the orig mbuf packet */	m->m_len += iphlen;	m->m_data -= iphlen;	*ip=save_ip;	so->so_m=m;         /* ICMP backup */	return;bad:	m_freem(m);	/* if (opts) m_freem(opts); */	return;}int udp_output2(struct socket *so, struct mbuf *m,                 struct sockaddr_in *saddr, struct sockaddr_in *daddr,                int iptos){	register struct udpiphdr *ui;	int error = 0;	DEBUG_CALL("udp_output");	DEBUG_ARG("so = %lx", (long)so);	DEBUG_ARG("m = %lx", (long)m);	DEBUG_ARG("saddr = %lx", (long)saddr->sin_addr.s_addr);	DEBUG_ARG("daddr = %lx", (long)daddr->sin_addr.s_addr);	/*	 * Adjust for header	 */	m->m_data -= sizeof(struct udpiphdr);	m->m_len += sizeof(struct udpiphdr);		/*	 * Fill in mbuf with extended UDP header	 * and addresses and length put into network format.	 */	ui = mtod(m, struct udpiphdr *);	ui->ui_next = ui->ui_prev = 0;	ui->ui_x1 = 0;	ui->ui_pr = IPPROTO_UDP;	ui->ui_len = htons(m->m_len - sizeof(struct ip)); /* + sizeof (struct udphdr)); */	/* XXXXX Check for from-one-location sockets, or from-any-location sockets */        ui->ui_src = saddr->sin_addr;	ui->ui_dst = daddr->sin_addr;	ui->ui_sport = saddr->sin_port;	ui->ui_dport = daddr->sin_port;	ui->ui_ulen = ui->ui_len;	/*	 * Stuff checksum and output datagram.	 */	ui->ui_sum = 0;	if (udpcksum) {	    if ((ui->ui_sum = cksum(m, /* sizeof (struct udpiphdr) + */ m->m_len)) == 0)		ui->ui_sum = 0xffff;	}	((struct ip *)ui)->ip_len = m->m_len;	((struct ip *)ui)->ip_ttl = ip_defttl;	((struct ip *)ui)->ip_tos = iptos;		udpstat.udps_opackets++;		error = ip_output(so, m);		return (error);}int udp_output(struct socket *so, struct mbuf *m,                struct sockaddr_in *addr){    struct sockaddr_in saddr, daddr;    saddr = *addr;    if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr) {        saddr.sin_addr.s_addr = so->so_faddr.s_addr;        if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff))            saddr.sin_addr.s_addr = alias_addr.s_addr;    }    daddr.sin_addr = so->so_laddr;    daddr.sin_port = so->so_lport;        return udp_output2(so, m, &saddr, &daddr, so->so_iptos);}intudp_attach(so)     struct socket *so;{  struct sockaddr_in addr;	  if((so->s = socket(AF_INET,SOCK_DGRAM,0)) != -1) {    /*     * Here, we bind() the socket.  Although not really needed     * (sendto() on an unbound socket will bind it), it's done     * here so that emulation of ytalk etc. don't have to do it     */    addr.sin_family = AF_INET;    addr.sin_port = 0;    addr.sin_addr.s_addr = INADDR_ANY;    if(bind(so->s, (struct sockaddr *)&addr, sizeof(addr))<0) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最大色网站| 国产欧美日韩三区| 丝袜美腿亚洲色图| 欧美精品欧美精品系列| 五月婷婷激情综合| 日韩免费在线观看| 国产乱码精品一区二区三区忘忧草| xvideos.蜜桃一区二区| 国产成人免费视| 亚洲黄色小视频| 欧美日韩成人综合天天影院| 精品一区二区三区在线观看| 国产欧美精品国产国产专区| 日本高清视频一区二区| 日日夜夜一区二区| 国产欧美va欧美不卡在线| 91免费视频网| 美腿丝袜亚洲综合| 久久先锋资源网| 99久久久精品免费观看国产蜜| 一区二区三区中文免费| 日韩女优毛片在线| 91香蕉视频黄| 精品亚洲国产成人av制服丝袜| 国产亚洲美州欧州综合国| 在线影院国内精品| 国产在线不卡视频| 亚洲色图一区二区| 日韩女优av电影在线观看| 99re热这里只有精品视频| 天天综合日日夜夜精品| 国产欧美日韩不卡免费| 欧美日本高清视频在线观看| 亚洲一区中文在线| 久久精品亚洲一区二区三区浴池| 欧美中文字幕一区| 国产成人免费视频网站| 日韩不卡一二三区| 亚洲人成在线播放网站岛国| 欧美www视频| 欧美日韩一区不卡| 福利视频网站一区二区三区| 日韩中文字幕1| 国产精品免费观看视频| 精品久久一区二区三区| 欧美日韩国产精品自在自线| 99久久久久久| 国产成人自拍网| 蜜臀久久99精品久久久画质超高清| 亚洲女人小视频在线观看| 亚洲精品一区二区三区蜜桃下载| 欧美日韩国产123区| 97久久精品人人澡人人爽| 国产在线精品免费av| 午夜精品视频一区| 一区二区三区四区乱视频| 亚洲国产高清aⅴ视频| 欧美一级日韩免费不卡| 欧美亚洲综合一区| 91久久免费观看| k8久久久一区二区三区| 国产在线国偷精品免费看| 毛片基地黄久久久久久天堂| 亚洲在线观看免费视频| 亚洲天堂福利av| 国产精品日产欧美久久久久| 免费在线观看日韩欧美| 欧美videos中文字幕| 欧美日韩国产经典色站一区二区三区| 91视频www| 91亚洲永久精品| 97精品久久久午夜一区二区三区| 岛国精品在线观看| 福利一区福利二区| 成人免费观看视频| 不卡免费追剧大全电视剧网站| 国产成人免费在线| 成人午夜视频网站| 成人精品视频一区二区三区| 成人精品鲁一区一区二区| 成人美女视频在线看| 91在线丨porny丨国产| 99久久精品国产网站| 91香蕉视频mp4| 91成人在线精品| 欧美日韩你懂的| 日韩欧美成人激情| 久久精品在线免费观看| 国产精品区一区二区三区| 成人欧美一区二区三区白人| 亚洲欧美另类久久久精品| 亚洲一区国产视频| 老司机午夜精品| 国产一区二区三区久久悠悠色av| 国产寡妇亲子伦一区二区| 99国产精品久| 欧美伦理电影网| 精品国产三级a在线观看| 国产亲近乱来精品视频| 亚洲男同1069视频| 日本三级亚洲精品| 国产中文字幕一区| 91在线精品一区二区| 亚洲欧洲色图综合| 亚洲一区自拍偷拍| 韩国一区二区三区| 91丨九色丨尤物| 欧美日韩国产另类一区| 国产夜色精品一区二区av| 亚洲精品日韩专区silk| 老司机精品视频线观看86| kk眼镜猥琐国模调教系列一区二区| 欧美色精品在线视频| 久久亚洲私人国产精品va媚药| 亚洲视频在线一区二区| 日本在线观看不卡视频| 成人黄色免费短视频| 在线播放中文一区| 国产精品久久久久久久久快鸭| 午夜精品一区二区三区免费视频 | 欧美国产精品一区| 亚洲一区二区在线视频| 国产成人精品网址| 91精品国产一区二区人妖| 国产精品久久久久影院色老大| 肉丝袜脚交视频一区二区| av高清不卡在线| 精品久久久久久久久久久久久久久久久 | **性色生活片久久毛片| 久久国产尿小便嘘嘘| 日本高清不卡aⅴ免费网站| 久久欧美一区二区| 日韩精品一级中文字幕精品视频免费观看| 成人美女在线视频| 首页国产丝袜综合| 色婷婷综合久久久中文字幕| 久久精品免视看| 久久精品国产77777蜜臀| 欧美午夜免费电影| 成人欧美一区二区三区黑人麻豆 | 欧美一二三在线| 一区二区三区四区高清精品免费观看 | 日本欧美韩国一区三区| 色婷婷激情一区二区三区| 久久久99精品免费观看不卡| 日本不卡视频在线| 欧美女孩性生活视频| 亚洲精品中文在线影院| 99视频在线精品| 国产无人区一区二区三区| 精品一区二区三区在线观看国产| 欧美乱妇一区二区三区不卡视频| 亚洲综合在线五月| 91美女福利视频| 国产精品美女久久久久aⅴ国产馆| 国产一区二区久久| 精品av久久707| 美女高潮久久久| 日韩欧美视频在线| 免费久久精品视频| 欧美一区二区三区四区高清| 日韩专区中文字幕一区二区| 欧美日韩第一区日日骚| 天天影视网天天综合色在线播放| 欧美在线观看视频在线| 亚洲影院在线观看| 欧美美女直播网站| 日日夜夜免费精品| 日韩欧美成人一区二区| 韩国三级在线一区| 国产日韩欧美a| 懂色av噜噜一区二区三区av| 中文字幕巨乱亚洲| 99久久精品一区| 亚洲综合激情小说| 欧美乱熟臀69xxxxxx| 蜜臀av一区二区三区| 久久综合99re88久久爱| 国产精品99久久久久久久女警| 欧美国产禁国产网站cc| 99热在这里有精品免费| 亚洲黄色性网站| 欧美放荡的少妇| 国内精品免费**视频| 国产精品丝袜黑色高跟| 一本色道久久综合狠狠躁的推荐 | 日本欧美久久久久免费播放网| 精品日韩成人av| 成人国产精品免费网站| 夜夜嗨av一区二区三区四季av| 欧美日韩国产123区| 国精产品一区一区三区mba桃花| 国产人久久人人人人爽| 在线观看视频91| 久久99在线观看| 国产精品久久久久久一区二区三区| 91福利视频在线| 久久精品国产99国产精品| 成人免费在线视频| 欧美一级国产精品|