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

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

?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人免费网| 国产一区91精品张津瑜| 精品久久人人做人人爽| 一本久道久久综合中文字幕 | 国产精品久久久久久户外露出| 欧美日韩欧美一区二区| 国产成人精品亚洲午夜麻豆| 日韩精品一区第一页| 亚洲私人黄色宅男| 久久久久九九视频| 欧美xxxxxxxx| 欧美日韩国产电影| 色综合天天综合色综合av| 国产在线国偷精品免费看| 视频在线在亚洲| 亚洲人快播电影网| 捆绑调教美女网站视频一区| 日韩一区二区免费电影| 91色在线porny| 国产精品资源在线看| 奇米精品一区二区三区在线观看一 | 日韩欧美一区电影| 欧美亚洲动漫精品| av在线播放一区二区三区| 国产原创一区二区| 久久国产精品色婷婷| 日韩国产在线观看| 天天综合天天综合色| 亚洲一区二区三区爽爽爽爽爽 | 亚洲男女毛片无遮挡| 国产精品免费视频网站| 久久九九全国免费| 国产亚洲一二三区| 久久久久久久久久久黄色| 日韩欧美一区在线观看| 欧美久久一区二区| 欧美精品 国产精品| 欧美日韩国产首页| 欧美日韩精品三区| 91精品国产手机| 9191国产精品| 日韩三级在线免费观看| 日韩一区二区三免费高清| 日韩欧美一二三四区| 日韩一区二区三区免费看| 日韩一级黄色片| 欧美大胆人体bbbb| 久久婷婷综合激情| 国产精品久久久久久妇女6080| 国产精品久线观看视频| 亚洲免费观看在线视频| 亚洲中国最大av网站| 亚洲一区精品在线| 蜜臀久久99精品久久久久宅男| 午夜不卡av免费| 麻豆精品在线观看| 国产福利一区在线| av一二三不卡影片| 欧美影院一区二区| 91精品国产综合久久香蕉麻豆| 欧美一级日韩一级| 国产欧美一区二区三区在线看蜜臀| 日本一区二区不卡视频| 一区二区三区不卡在线观看 | 国产传媒一区在线| caoporm超碰国产精品| 日本高清不卡视频| 91精品在线一区二区| 久久蜜桃香蕉精品一区二区三区| 国产精品日日摸夜夜摸av| 又紧又大又爽精品一区二区| 日产欧产美韩系列久久99| 狠狠色丁香久久婷婷综| 顶级嫩模精品视频在线看| 色综合一个色综合| 精品国产在天天线2019| 国产精品女主播在线观看| 亚洲高清在线视频| 国产成人精品一区二区三区网站观看 | 免费成人你懂的| 懂色av中文一区二区三区| 欧美日韩五月天| 久久精品日韩一区二区三区| 亚洲美女屁股眼交3| 蜜桃在线一区二区三区| 成人高清伦理免费影院在线观看| 欧美日韩和欧美的一区二区| 久久九九全国免费| 婷婷夜色潮精品综合在线| 国产99久久久久| 欧美日本韩国一区二区三区视频| 久久久亚洲欧洲日产国码αv| 亚洲摸摸操操av| 国产一区二区美女诱惑| 精品污污网站免费看| 亚洲国产精品传媒在线观看| 日本视频一区二区三区| 91蜜桃免费观看视频| 精品福利av导航| 午夜欧美视频在线观看 | 99精品视频中文字幕| 日韩美女主播在线视频一区二区三区 | 色婷婷国产精品| 久久久久九九视频| 日本中文字幕一区| 91黄色免费版| 国产欧美日韩激情| 久久er精品视频| 91精品国产综合久久久久久漫画| 亚洲色图清纯唯美| 成人综合婷婷国产精品久久蜜臀 | 日本aⅴ免费视频一区二区三区| 成人精品高清在线| 精品国内片67194| 日韩精品91亚洲二区在线观看| 色噜噜狠狠色综合中国| 国产精品网曝门| 国产精品一二二区| 久久综合久色欧美综合狠狠| 日韩高清欧美激情| 欧美日韩极品在线观看一区| 亚洲激情自拍偷拍| 91亚洲国产成人精品一区二三| 国产欧美一区二区精品性| 久久国产三级精品| 日韩三级在线观看| 另类成人小视频在线| 欧美一区二区精品| 日韩国产成人精品| 制服丝袜国产精品| 午夜精品一区在线观看| 欧美日韩另类国产亚洲欧美一级| 一区二区三区成人| 欧美性欧美巨大黑白大战| 一区二区三区免费网站| 一本一道波多野结衣一区二区| 国产精品福利一区二区| 成人免费福利片| 中文字幕亚洲一区二区av在线 | 国产精品高潮久久久久无| 高清不卡一区二区在线| 欧美国产精品一区二区三区| 成人aaaa免费全部观看| 亚洲色图制服诱惑| 欧美日韩黄色一区二区| 奇米一区二区三区av| 久久综合色鬼综合色| 成人午夜av影视| 自拍偷拍国产亚洲| 欧美人狂配大交3d怪物一区| 日韩高清在线不卡| 久久综合九色综合97婷婷| 国产成人精品aa毛片| 一区在线播放视频| 欧美在线免费视屏| 日韩av二区在线播放| 欧美va亚洲va| 福利电影一区二区| 亚洲欧美一区二区三区国产精品| 色94色欧美sute亚洲13| 香蕉久久一区二区不卡无毒影院 | 国产精品欧美精品| 在线观看视频91| 青青草一区二区三区| 国产欧美综合在线观看第十页| 99久久精品情趣| 性做久久久久久免费观看| 久久综合五月天婷婷伊人| 99在线精品一区二区三区| 亚洲成人精品一区| 欧美精品一区二区三区一线天视频| 国产98色在线|日韩| 亚洲卡通动漫在线| 日韩视频一区在线观看| 粉嫩高潮美女一区二区三区| 亚洲chinese男男1069| 久久九九国产精品| 欧美无人高清视频在线观看| 国产一区二区三区综合| 亚洲日本免费电影| 日韩一卡二卡三卡| 成人免费高清在线观看| 日本成人在线看| 国产精品国产三级国产专播品爱网| 欧美午夜精品电影| 成人午夜电影网站| 美女爽到高潮91| 亚洲精品久久久久久国产精华液| 欧美一级日韩不卡播放免费| 99精品久久99久久久久| 蜜桃av一区二区三区电影| 中文字幕亚洲在| 26uuu国产在线精品一区二区| 色噜噜久久综合| 成人污视频在线观看| 日韩高清电影一区| 一区二区三区在线视频观看58| 国产日韩三级在线| 日韩欧美国产午夜精品| 在线观看日韩国产|