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

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

?? in_pcb.c

?? 完整的TCP/IP源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* in_pcb.c - internet protocol control block routines *//* Copyright 1984-1996 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1982, 1986, 1991, 1993, 1995 *	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. * *	@(#)in_pcb.c	8.4 (Berkeley) 5/24/95 *//*modification history--------------------01h,11feb00,gnn  first checkin to openstack (Siemens ONLY)01g,02nov99,pul  modifications to support enhanced routing interface01f,05oct97,vin  changed ip_freemoptions for new multicasting changes.01e,01jul97,vin  added rtMissMsgHook for scalability of routing sockets.01d,31mar97,vin  integrated with FREEBSD 2.2.1 for hashlookups of pcbs01c,05feb97,rjc  changed for tos routing.01b,05dec96,vin  replaced malloc with MALLOC and free with FREE(),01a,03mar96,vin  created from BSD4.4 stuff,integrated with 02k of in_pcb.c*//*DESCRIPTION*/#include "vxWorks.h"#include "net/systm.h"#include "errno.h"#include "net/mbuf.h"#include "sys/socket.h"#include "net/socketvar.h"#include "sys/ioctl.h"#include "net/if.h"#include "netinet/in.h"#include "netinet/in_systm.h"#include "net/route.h"#include "netinet/in_pcb.h"#include "netinet/in_var.h"#include "netinet/ip_var.h"#include "net/protosw.h"#include "routeEnhLib.h"struct	in_addr zeroin_addr;intin_pcballoc(so, pcbinfo)	struct socket *so;	struct inpcbinfo *pcbinfo;{	register struct inpcb *inp;	int s;	MALLOC(inp, struct inpcb *, sizeof(*inp), MT_PCB, M_DONTWAIT);	if (inp == NULL)		return (ENOBUFS);	bzero((caddr_t)inp, sizeof(*inp));	inp->inp_pcbinfo = pcbinfo;	inp->inp_socket = so;	s = splnet();	LIST_INSERT_HEAD(pcbinfo->listhead, inp, inp_list);	in_pcbinshash(inp);	splx(s);	so->so_pcb = (caddr_t)inp;	return (0);}intin_pcbbind(inp, nam)	register struct inpcb *inp;	struct mbuf *nam;{	register struct socket *so = inp->inp_socket;	unsigned short *lastport = &inp->inp_pcbinfo->lastport;	struct sockaddr_in *sin;	u_short lport = 0;	int wild = 0, reuseport = (so->so_options & SO_REUSEPORT);	if (in_ifaddr == 0)		return (EADDRNOTAVAIL);	if (inp->inp_lport || inp->inp_laddr.s_addr != INADDR_ANY)		return (EINVAL);	if ((so->so_options & (SO_REUSEADDR|SO_REUSEPORT)) == 0 &&	    ((so->so_proto->pr_flags & PR_CONNREQUIRED) == 0 ||	     (so->so_options & SO_ACCEPTCONN) == 0))		wild = INPLOOKUP_WILDCARD;	if (nam) {		sin = mtod(nam, struct sockaddr_in *);		if (nam->m_len != sizeof (*sin))			return (EINVAL);#ifdef notdef		/*		 * We should check the family, but old programs		 * incorrectly fail to initialize it.		 */		if (sin->sin_family != AF_INET)			return (EAFNOSUPPORT);#endif		lport = sin->sin_port;		if (IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) {			/*			 * Treat SO_REUSEADDR as SO_REUSEPORT for multicast;			 * allow complete duplication of binding if			 * SO_REUSEPORT is set, or if SO_REUSEADDR is set			 * and a multicast address is bound on both			 * new and duplicated sockets.			 */			if (so->so_options & SO_REUSEADDR)				reuseport = SO_REUSEADDR|SO_REUSEPORT;		} else if (sin->sin_addr.s_addr != INADDR_ANY) {			sin->sin_port = 0;		/* yech... */			if (ifa_ifwithaddr((struct sockaddr *)sin) == 0)				return (EADDRNOTAVAIL);		}		if (lport) {			struct inpcb *t;			/* GROSS */#if 0 /* XXX took out because we are always in super user mode. */			if (ntohs(lport) < IPPORT_RESERVED &&			    (error = suser(p->p_ucred, &p->p_acflag)))				return (EACCES);#endif			t = in_pcblookup(inp->inp_pcbinfo, zeroin_addr, 0,			    sin->sin_addr, lport, wild);			if (t && (reuseport & t->inp_socket->so_options) == 0)				return (EADDRINUSE);		}		inp->inp_laddr = sin->sin_addr;	}	if (lport == 0)		do {			++*lastport;			if (*lastport < IPPORT_RESERVED ||			    *lastport > IPPORT_USERRESERVED)				*lastport = IPPORT_RESERVED;			lport = htons(*lastport);		} while (in_pcblookup(inp->inp_pcbinfo,			    zeroin_addr, 0, inp->inp_laddr, lport, wild));	inp->inp_lport = lport;	in_pcbrehash(inp);	return (0);}/* *   Transform old in_pcbconnect() into an inner subroutine for new *   in_pcbconnect(): Do some validity-checking on the remote *   address (in mbuf 'nam') and then determine local host address *   (i.e., which interface) to use to access that remote host. * *   This preserves definition of in_pcbconnect(), while supporting a *   slightly different version for T/TCP.  (This is more than *   a bit of a kludge, but cleaning up the internal interfaces would *   have forced minor changes in every protocol). */intin_pcbladdr(inp, nam, plocal_sin)	register struct inpcb *inp;	struct mbuf *nam;	struct sockaddr_in **plocal_sin;{	struct in_ifaddr *ia;	register struct sockaddr_in *sin = mtod(nam, struct sockaddr_in *);	if (nam->m_len != sizeof (*sin))		return (EINVAL);	if (sin->sin_family != AF_INET)		return (EAFNOSUPPORT);	if (sin->sin_port == 0)		return (EADDRNOTAVAIL);	if (in_ifaddr) {		/*		 * If the destination address is INADDR_ANY,		 * use the primary local address.		 * If the supplied address is INADDR_BROADCAST,		 * and the primary interface supports broadcast,		 * choose the broadcast address for that interface.		 */#define	satosin(sa)	((struct sockaddr_in *)(sa))#define sintosa(sin)	((struct sockaddr *)(sin))#define ifatoia(ifa)	((struct in_ifaddr *)(ifa))		if (sin->sin_addr.s_addr == INADDR_ANY)		    sin->sin_addr = IA_SIN(in_ifaddr)->sin_addr;		else if (sin->sin_addr.s_addr == (u_long)INADDR_BROADCAST &&		  (in_ifaddr->ia_ifp->if_flags & IFF_BROADCAST))		    sin->sin_addr = satosin(&in_ifaddr->ia_broadaddr)->sin_addr;	}	if (inp->inp_laddr.s_addr == INADDR_ANY) {		register struct route *ro;		ia = (struct in_ifaddr *)0;		/*		 * If route is known or can be allocated now,		 * our src addr is taken from the i/f, else punt.		 */		ro = &inp->inp_route;		if (ro->ro_rt &&		    (satosin(&ro->ro_dst)->sin_addr.s_addr !=			sin->sin_addr.s_addr ||		    inp->inp_socket->so_options & SO_DONTROUTE)) {			RTFREE(ro->ro_rt);			ro->ro_rt = (struct rtentry *)0;		}		if ((inp->inp_socket->so_options & SO_DONTROUTE) == 0 && /*XXX*/		    (ro->ro_rt == (struct rtentry *)0 ||		    ro->ro_rt->rt_ifp == (struct ifnet *)0)) {			/* No route yet, so try to acquire one */			ro->ro_dst.sa_family = AF_INET;			ro->ro_dst.sa_len = sizeof(struct sockaddr_in);			((struct sockaddr_in *) &ro->ro_dst)->sin_addr =				sin->sin_addr;                        TOS_SET ((struct sockaddr_in *) &ro->ro_dst, inp->inp_ip.ip_tos);			rtalloc(ro);		}		/*		 * If we found a route, use the address		 * corresponding to the outgoing interface		 * unless it is the loopback (in case a route		 * to our address on another net goes to loopback).		 */		if (ro->ro_rt && !(ro->ro_rt->rt_ifp->if_flags & IFF_LOOPBACK))			ia = ifatoia(ro->ro_rt->rt_ifa);		if (ia == 0) {			u_short fport = sin->sin_port;			sin->sin_port = 0;			ia = ifatoia(ifa_ifwithdstaddr(sintosa(sin)));			if (ia == 0)				ia = ifatoia(ifa_ifwithnet(sintosa(sin)));			sin->sin_port = fport;			if (ia == 0)				ia = in_ifaddr;			if (ia == 0)				return (EADDRNOTAVAIL);		}		/*		 * If the destination address is multicast and an outgoing		 * interface has been set as a multicast option, use the		 * address of that interface as our source address.		 */		if (IN_MULTICAST(ntohl(sin->sin_addr.s_addr)) &&		    inp->inp_moptions != NULL) {			struct ip_moptions *imo;			struct ifnet *ifp;			imo = inp->inp_moptions;			if (imo->imo_multicast_ifp != NULL) {				ifp = imo->imo_multicast_ifp;				for (ia = in_ifaddr; ia; ia = ia->ia_next)					if (ia->ia_ifp == ifp)						break;				if (ia == 0)					return (EADDRNOTAVAIL);			}		}	/*	 * Don't do pcblookup call here; return interface in plocal_sin	 * and exit to caller, that will do the lookup.	 */		*plocal_sin = &ia->ia_addr;	}	return(0);}/* * Outer subroutine: * Connect from a socket to a specified address. * Both address and port must be specified in argument sin. * If don't have a local address for this socket yet, * then pick one. */intin_pcbconnect(inp, nam)	register struct inpcb *inp;	struct mbuf *nam;{	struct sockaddr_in *ifaddr;	register struct sockaddr_in *sin = mtod(nam, struct sockaddr_in *);	int error;	/*	 *   Call inner routine, to assign local interface address.	 */	if ((error = in_pcbladdr(inp, nam, &ifaddr)) != 0)		return(error);	if (in_pcblookuphash(inp->inp_pcbinfo, sin->sin_addr, sin->sin_port,	    ((inp->inp_laddr.s_addr) ? inp->inp_laddr : ifaddr->sin_addr),	    inp->inp_lport, 0) != NULL)		return (EADDRINUSE);	if (inp->inp_laddr.s_addr == INADDR_ANY) {		if (inp->inp_lport == 0)			(void)in_pcbbind(inp, (struct mbuf *)0);		inp->inp_laddr = ifaddr->sin_addr;	}	inp->inp_faddr = sin->sin_addr;	inp->inp_fport = sin->sin_port;	in_pcbrehash(inp);	return (0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品黄色在线观看| 欧美无乱码久久久免费午夜一区| 午夜精品久久久久久久久久| 美洲天堂一区二卡三卡四卡视频 | 免费欧美在线视频| 午夜精品久久久久影视| 午夜国产不卡在线观看视频| 夜夜爽夜夜爽精品视频| 亚洲一级二级在线| 亚洲高清三级视频| 午夜电影网亚洲视频| 麻豆极品一区二区三区| 国产剧情一区二区| 国产精品亚洲成人| 一本一道综合狠狠老| 欧美视频一区在线| 91精品国产综合久久福利软件| 日韩欧美激情一区| 日本一区二区三区久久久久久久久不| 国产日韩欧美精品在线| 亚洲精品亚洲人成人网在线播放| 亚洲午夜在线观看视频在线| 日本欧美一区二区| 国产精品白丝jk黑袜喷水| 99re成人精品视频| 91麻豆精品国产91久久久更新时间 | 欧美激情一区二区三区全黄| 中文字幕中文字幕一区| 亚洲成人动漫精品| 国产一区 二区 三区一级| 精品国产一区二区三区四区四| 久久色.com| 亚洲男同性恋视频| 久久国产麻豆精品| 91精品福利在线| 精品福利一区二区三区| 一区二区三区四区中文字幕| 美女网站视频久久| 色94色欧美sute亚洲线路一久 | 国产三级一区二区三区| 亚洲色图视频免费播放| 日韩中文字幕不卡| 成人app在线观看| 欧美岛国在线观看| 亚洲动漫第一页| 国产盗摄一区二区| 日韩一二三四区| 亚洲香肠在线观看| 成人高清视频免费观看| 欧美成人精品二区三区99精品| 亚洲美女精品一区| 成人高清免费观看| 久久久久久久久伊人| 日韩电影在线观看电影| 色综合久久综合中文综合网| 久久久久久一级片| 久久av资源网| 日韩一区二区在线免费观看| 亚洲国产成人tv| 91原创在线视频| 国产精品视频你懂的| 国产在线一区二区综合免费视频| 欧美三区在线观看| 一区二区国产盗摄色噜噜| 国产精品白丝jk黑袜喷水| 日韩欧美一级在线播放| 日日摸夜夜添夜夜添国产精品| 欧美性xxxxxxxx| 玉米视频成人免费看| 99精品久久只有精品| 成人欧美一区二区三区白人 | 国内精品久久久久影院一蜜桃| 欧美亚洲精品一区| 一区二区在线观看不卡| 99久久精品久久久久久清纯| 国产欧美一区二区精品性色| 狠狠色狠狠色综合| 精品成a人在线观看| 久久精品国产亚洲aⅴ| 日韩欧美一区二区免费| 久久国产夜色精品鲁鲁99| 日韩免费观看高清完整版在线观看| 五月婷婷久久综合| 日韩欧美一级二级| 国产精品99久久久久久似苏梦涵| 亚洲精品在线电影| 成人性生交大片免费看在线播放 | 本田岬高潮一区二区三区| 欧美韩国日本一区| 91免费精品国自产拍在线不卡| 《视频一区视频二区| 欧美午夜精品一区二区三区| 日韩精品电影一区亚洲| 久久综合久久鬼色中文字| 成人激情综合网站| 亚洲主播在线播放| 日韩一区二区电影网| 高清国产一区二区| 亚洲午夜精品一区二区三区他趣| 日韩欧美精品在线视频| 国产不卡在线视频| 亚洲一区精品在线| 久久午夜羞羞影院免费观看| 成人国产一区二区三区精品| 亚洲午夜激情av| 久久久久久**毛片大全| 欧美综合一区二区| 国内精品写真在线观看| 亚洲乱码中文字幕| 2024国产精品| 欧美日韩美女一区二区| 国产成人亚洲精品青草天美| 亚洲电影一级黄| 国产精品色哟哟网站| 宅男在线国产精品| av成人老司机| 久久精品久久久精品美女| 亚洲精品中文在线影院| 精品日韩99亚洲| 日本高清免费不卡视频| 国产精品18久久久| 日韩av二区在线播放| 综合激情成人伊人| 久久色.com| 日韩三级视频在线看| 色综合色综合色综合 | 在线视频你懂得一区二区三区| 日韩电影在线看| 一区二区三区高清不卡| 亚洲国产成人自拍| 欧美成人video| 精品视频一区二区三区免费| 99re这里都是精品| 成人免费va视频| 韩国精品在线观看| 免费在线一区观看| 午夜影院久久久| 亚洲线精品一区二区三区| 亚洲欧洲性图库| 国产精品美日韩| 欧美激情在线看| 欧美激情在线看| 国产女人18水真多18精品一级做| 欧美一级精品大片| 日韩一二三区不卡| 777a∨成人精品桃花网| 欧美午夜视频网站| 欧洲一区在线电影| 欧美视频在线观看一区二区| 91玉足脚交白嫩脚丫在线播放| 成人黄色在线视频| av综合在线播放| 色综合天天综合网国产成人综合天| 成人高清视频在线| 99精品久久久久久| 91亚洲永久精品| 91行情网站电视在线观看高清版| 99精品黄色片免费大全| 色综合久久中文综合久久97| 色88888久久久久久影院野外| 色婷婷亚洲综合| 欧美剧情片在线观看| 欧美一区二区高清| 久久夜色精品一区| 成人免费一区二区三区视频| 一区二区三区免费| 午夜精品成人在线视频| 青青草原综合久久大伊人精品| 久久99久久精品| www.日韩av| 欧美日韩1234| 久久蜜桃av一区精品变态类天堂| 欧美高清在线一区二区| 亚洲激情在线激情| 日本成人在线不卡视频| 国产精品性做久久久久久| 99久久精品免费精品国产| 欧美日韩高清一区二区三区| 欧美大片国产精品| 中文字幕在线不卡国产视频| 亚洲综合免费观看高清完整版在线 | 欧美高清在线视频| 伊人色综合久久天天| 免费视频一区二区| 波多野结衣中文字幕一区| 欧美日韩电影在线播放| 久久中文字幕电影| 一区二区三区精品在线| 激情综合五月天| 91视视频在线直接观看在线看网页在线看| 日本韩国欧美一区二区三区| 欧美大片一区二区三区| 亚洲欧美成人一区二区三区| 蜜臀va亚洲va欧美va天堂| 成av人片一区二区| 日韩亚洲欧美综合| 亚洲激情综合网| 国产成a人无v码亚洲福利| 在线播放欧美女士性生活| 成人免费在线播放视频|