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

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

?? in_pcb.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* in_pcb.c - internet protocol control block routines *//* Copyright 1984 - 2001 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--------------------01g,12oct01,rae  merge from truestack ver 01k, base 01f (SPR #69867 etc.)01f,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"#ifdef VIRTUAL_STACK#include "netinet/vsLib.h"#endif /* VIRTUAL_STACK */#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET#include "wvNetLib.h"#endif#endifstruct	in_addr   zeroin_addr;#ifdef VIRTUAL_STACK#define IN_IFADDR _in_ifaddr#else#define IN_IFADDR in_ifaddr#endif#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* Set common fields of event identifiers for this module. */LOCAL UCHAR wvNetModuleId = WV_NET_INPCB_MODULE;   /* Value for in_pcb.c */LOCAL UCHAR wvNetLocalFilter = WV_NET_NONE;     /* Available event filter */LOCAL ULONG wvNetEventId;       /* Event identifier: see wvNetLib.h */#endif    /* INCLUDE_WVNET */#endifintin_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)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */            WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_EMERGENCY, 13, 1,                              WV_NETEVENT_PCBALLOC_NOBUFS, so->so_fd)#endif  /* INCLUDE_WVNET */#endif            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);#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */    WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_VERBOSE, 23, 11,                      WV_NETEVENT_PCBBIND_START, so->so_fd)#endif  /* INCLUDE_WVNET */#endif#ifdef VIRTUAL_STACK	if (_in_ifaddr == 0)#else	if (in_ifaddr == 0)#endif /* VIRTUAL_STACK */            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_ERROR, 10, 2,                             WV_NETEVENT_PCBBIND_NOADDR, so->so_fd)#endif  /* INCLUDE_WVNET */#endif            return (EADDRNOTAVAIL);            }	if (inp->inp_lport || inp->inp_laddr.s_addr != INADDR_ANY)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_3 (NET_AUX_EVENT, WV_NET_ERROR, 11, 3,                             WV_NETEVENT_PCBBIND_BADSOCK, so->so_fd,                             inp->inp_laddr.s_addr, inp->inp_lport)#endif  /* INCLUDE_WVNET */#endif            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))                    {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_2 (NET_AUX_EVENT, WV_NET_ERROR, 12, 4,                              WV_NETEVENT_PCBBIND_BADADDRLEN,                             so->so_fd, nam->m_len)#endif  /* INCLUDE_WVNET */#endif                    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)                            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_2 (NET_AUX_EVENT, WV_NET_ERROR, 13, 5,                              WV_NETEVENT_PCBBIND_BADADDR,                             so->so_fd, sin->sin_addr.s_addr)#endif  /* INCLUDE_WVNET */#endif                            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)                            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_2 (NET_AUX_EVENT, WV_NET_ERROR, 14, 6,                              WV_NETEVENT_PCBBIND_BADPORT, so->so_fd, lport)#endif  /* INCLUDE_WVNET */#endif                            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))            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_4 (NET_AUX_EVENT, WV_NET_ERROR, 15, 7,                              WV_NETEVENT_PCBLADDR_BADADDR,                              inp->inp_socket->so_fd, nam->m_len,                              sin->sin_family, sin->sin_port)#endif  /* INCLUDE_WVNET */#endif            return (EINVAL);            }	if (sin->sin_family != AF_INET)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_4 (NET_AUX_EVENT, WV_NET_ERROR, 15, 7,                              WV_NETEVENT_PCBLADDR_BADADDR,                              inp->inp_socket->so_fd, nam->m_len,                              sin->sin_family, sin->sin_port)#endif  /* INCLUDE_WVNET */#endif            return (EAFNOSUPPORT);            }	if (sin->sin_port == 0)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_4 (NET_AUX_EVENT, WV_NET_ERROR, 15, 7,                              WV_NETEVENT_PCBLADDR_BADADDR,                              inp->inp_socket->so_fd, nam->m_len,                              sin->sin_family, sin->sin_port)#endif  /* INCLUDE_WVNET */#endif            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)		    {                    for (ia = IN_IFADDR; ia; ia = ia->ia_next) 			 {			 if (ia->ia_ifp->if_flags & IFF_BROADCAST)			     {		             sin->sin_addr = 			         satosin(&IN_IFADDR->ia_next->ia_broadaddr)->sin_addr;                             break;			     }                         }                    }	}	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)                            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_4 (NET_AUX_EVENT, WV_NET_ERROR, 15, 7,                              WV_NETEVENT_PCBLADDR_BADADDR,                              inp->inp_socket->so_fd, nam->m_len,                              sin->sin_family, sin->sin_port)#endif  /* INCLUDE_WVNET */#endif                            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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日夜夜免费精品| 国产综合久久久久久鬼色| 日韩av电影天堂| 国产福利不卡视频| 91精品国产综合久久久久久漫画 | 国产乱色国产精品免费视频| 色吊一区二区三区| 欧美国产成人精品| 免费成人美女在线观看.| 在线视频国产一区| 国产精品福利在线播放| 狠狠色狠狠色综合日日91app| 91搞黄在线观看| 成人免费在线视频观看| 丰满少妇久久久久久久| 欧美一区二区三区视频在线| 亚洲资源在线观看| 色哟哟日韩精品| 亚洲美女在线一区| 99免费精品在线观看| 国产欧美va欧美不卡在线 | 亚洲欧洲精品成人久久奇米网| 免播放器亚洲一区| 91麻豆精品国产无毒不卡在线观看| 一区二区三区在线视频观看 | 欧美大度的电影原声| 亚洲狠狠丁香婷婷综合久久久| 丰满少妇久久久久久久| 欧美国产一区在线| 丁香婷婷综合五月| 国产欧美一区二区精品秋霞影院| 国产米奇在线777精品观看| 日韩免费观看高清完整版 | 欧美久久久久久久久中文字幕| 亚洲欧美视频在线观看视频| a级高清视频欧美日韩| 中文字幕在线观看不卡| av午夜一区麻豆| 亚洲猫色日本管| 欧美亚洲国产怡红院影院| 一区二区三区资源| 欧美美女视频在线观看| 日韩国产高清在线| 精品久久久久99| 国产福利91精品一区二区三区| 欧美国产精品一区二区三区| 成人av网在线| 亚洲激情在线激情| 欧美一级日韩不卡播放免费| 九九国产精品视频| 国产精品不卡视频| 欧美亚洲精品一区| 久久av中文字幕片| 中文字幕二三区不卡| 99久久99久久综合| 亚洲成人免费在线| 亚洲精品一区二区三区福利| 成人黄色片在线观看| 亚洲视频一区二区在线| 精品视频在线免费| 国产成人午夜精品影院观看视频 | 91片黄在线观看| 日韩福利视频网| 国产精品美女久久久久aⅴ| 欧洲一区二区三区免费视频| 日韩高清不卡一区二区三区| 国产偷v国产偷v亚洲高清| 91激情五月电影| 国产资源精品在线观看| 夜夜嗨av一区二区三区网页| 精品国产一区a| 91精品福利视频| 国产精品99久久久久| 亚洲丰满少妇videoshd| 国产欧美日韩视频在线观看| 欧美精品日韩一本| 成人av影视在线观看| 久久激情综合网| 午夜精品国产更新| 亚洲人成网站影音先锋播放| 日韩一区二区在线看| 91国内精品野花午夜精品| 国产原创一区二区| 亚洲va国产天堂va久久en| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美无砖砖区免费| 91网站最新网址| 国产精品1区二区.| 视频精品一区二区| 一区二区三区在线视频播放| 国产日韩欧美精品一区| 欧美大片在线观看一区二区| 在线观看免费亚洲| av不卡在线观看| 国产高清成人在线| 激情六月婷婷久久| 蜜臀精品久久久久久蜜臀 | 视频一区二区欧美| 亚洲一区二区三区四区的| 亚洲国产高清不卡| 2021中文字幕一区亚洲| 欧美一级片免费看| 欧美日韩一区二区三区高清| 91美女在线观看| 91丨九色porny丨蝌蚪| 岛国一区二区在线观看| 国产一区二区电影| 国产福利91精品| 国产高清不卡一区二区| 国产成a人亚洲精| 成人免费毛片片v| 成人动漫中文字幕| 成人中文字幕合集| 粉嫩13p一区二区三区| 国产成人在线影院| 成人网男人的天堂| 97久久精品人人做人人爽50路| 成人福利视频在线| 色综合久久久久久久久| 色中色一区二区| 欧美日本视频在线| 日韩视频一区二区三区| 日韩一级完整毛片| 久久久久久久久99精品| 久久女同精品一区二区| 国产日韩av一区| 国产精品伦一区| 伊人婷婷欧美激情| 午夜精品久久久久久久蜜桃app| 日本不卡一区二区三区| 国模一区二区三区白浆| 高清国产一区二区| 91国产视频在线观看| 777精品伊人久久久久大香线蕉| 欧美成人vr18sexvr| 国产午夜精品一区二区三区嫩草 | 国产资源在线一区| av毛片久久久久**hd| 欧美日韩综合在线| 日韩视频免费观看高清完整版 | 国产精品99久久久久久久vr| www.亚洲色图.com| 欧美日韩国产天堂| 精品福利二区三区| 亚洲视频电影在线| 婷婷开心激情综合| 国产九九视频一区二区三区| 色综合久久中文字幕| 日韩欧美在线123| 亚洲国产精品99久久久久久久久| 一区二区三区四区视频精品免费| 免费在线观看日韩欧美| caoporen国产精品视频| 欧美日韩亚洲综合在线 | 国产精品传媒入口麻豆| 亚洲成人综合视频| 成人一区在线观看| 欧美日韩一区成人| 国产视频一区在线播放| 亚洲第一成人在线| 国产成人免费xxxxxxxx| 91麻豆精品久久久久蜜臀| 成人欧美一区二区三区视频网页| 另类小说欧美激情| 91久久线看在观草草青青| 国产亚洲成av人在线观看导航| 性久久久久久久久久久久| av资源站一区| 欧美精品一区二区三区在线播放| 亚洲精品久久久久久国产精华液| 国产一区二区在线观看视频| 欧美亚洲国产一卡| 亚洲视频一区在线| 狠狠色综合色综合网络| 9191精品国产综合久久久久久 | 国产日产欧美一区二区三区| 午夜激情一区二区| 91老师国产黑色丝袜在线| 亚洲精品一区二区三区影院 | 亚洲精选在线视频| 成人午夜电影小说| 久久亚洲精华国产精华液| 三级不卡在线观看| 欧美日韩一区二区三区在线| 亚洲精品国产精品乱码不99| 国产成a人无v码亚洲福利| 日韩欧美国产综合在线一区二区三区| 亚洲精品欧美综合四区| 9l国产精品久久久久麻豆| 国产亚洲短视频| 国内精品伊人久久久久av影院| 日韩一区二区三区免费观看| 日韩成人伦理电影在线观看| 欧美精品一二三| 香蕉久久夜色精品国产使用方法 | 亚洲成人av在线电影| 欧美艳星brazzers| 午夜视频在线观看一区| 欧美性做爰猛烈叫床潮| 亚洲国产精品天堂|