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

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

?? in_pcb.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
				if (ia == 0)                                    {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */          WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_ERROR, 16, 8,                            WV_NETEVENT_PCBLADDR_BADIF, inp->inp_socket->so_fd)#endif  /* INCLUDE_WVNET */#endif                                    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;#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */    WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_VERBOSE, 24, 12,                      WV_NETEVENT_PCBCONNECT_START, inp->inp_socket->so_fd)#endif  /* INCLUDE_WVNET */#endif	/*	 *   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)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_4 (NET_AUX_EVENT, WV_NET_ERROR, 17, 9,                              WV_NETEVENT_PCBCONNECT_BADADDR,                             inp->inp_socket->so_fd, sin->sin_addr.s_addr,                             inp->inp_laddr.s_addr, inp->inp_lport);#endif  /* INCLUDE_WVNET */#endif            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);}voidin_pcbdisconnect(inp)	struct inpcb *inp;{#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */    WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_VERBOSE, 25, 13,                      WV_NETEVENT_PCBDISCONN_START, inp->inp_socket->so_fd)#endif  /* INCLUDE_WVNET */#endif	inp->inp_faddr.s_addr = INADDR_ANY;	inp->inp_fport = 0;	in_pcbrehash(inp);	if (inp->inp_socket->so_state & SS_NOFDREF)		in_pcbdetach(inp);}voidin_pcbdetach(inp)	struct inpcb *inp;{	struct socket *so = inp->inp_socket;	int s;	so->so_pcb = 0;	sofree(so);	if (inp->inp_options)		(void)m_free(inp->inp_options);	if (inp->inp_route.ro_rt)		rtfree(inp->inp_route.ro_rt);	ip_freemoptions(inp->inp_moptions, inp);	s = splnet();	LIST_REMOVE(inp, inp_hash);	LIST_REMOVE(inp, inp_list);	splx(s);	FREE(inp, MT_PCB);}voidin_setsockaddr(inp, nam)	register struct inpcb *inp;	struct mbuf *nam;{	register struct sockaddr_in *sin;	nam->m_len = sizeof (*sin);	sin = mtod(nam, struct sockaddr_in *);	bzero((caddr_t)sin, sizeof (*sin));	sin->sin_family = AF_INET;	sin->sin_len = sizeof(*sin);	sin->sin_port = inp->inp_lport;	sin->sin_addr = inp->inp_laddr;}voidin_setpeeraddr(inp, nam)	struct inpcb *inp;	struct mbuf *nam;{	register struct sockaddr_in *sin;	nam->m_len = sizeof (*sin);	sin = mtod(nam, struct sockaddr_in *);	bzero((caddr_t)sin, sizeof (*sin));	sin->sin_family = AF_INET;	sin->sin_len = sizeof(*sin);	sin->sin_port = inp->inp_fport;	sin->sin_addr = inp->inp_faddr;}/* * Pass some notification to all connections of a protocol * associated with address dst.  The local address and/or port numbers * may be specified to limit the search.  The "usual action" will be * taken, depending on the ctlinput cmd.  The caller must filter any * cmds that are uninteresting (e.g., no error in the map). * Call the protocol specific routine (if any) to report * any errors for each matching socket. * * Must be called at splnet. */voidin_pcbnotify(head, dst, fport_arg, laddr, lport_arg, cmd, notify)	struct inpcbhead *head;	struct sockaddr *dst;	u_int fport_arg, lport_arg;	struct in_addr laddr;	int cmd;	void (*notify) (struct inpcb *, int);{	register struct inpcb *inp, *oinp;	struct in_addr faddr;	u_short fport = fport_arg, lport = lport_arg;	int errno, s;#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */    WV_NET_MARKER_3 (NET_AUX_EVENT, WV_NET_VERBOSE, 26, 14,                      WV_NETEVENT_PCBNOTIFY_START, cmd, laddr.s_addr,                     ((struct sockaddr_in *)dst)->sin_addr.s_addr)#endif  /* INCLUDE_WVNET */#endif	if ((unsigned)cmd > PRC_NCMDS || dst->sa_family != AF_INET)		return;	faddr = ((struct sockaddr_in *)dst)->sin_addr;	if (faddr.s_addr == INADDR_ANY)		return;	/*	 * Redirects go to all references to the destination,	 * and use in_rtchange to invalidate the route cache.	 * Dead host indications: notify all references to the destination.	 * Otherwise, if we have knowledge of the local port and address,	 * deliver only to that socket.	 */	if (PRC_IS_REDIRECT(cmd) || cmd == PRC_HOSTDEAD) {		fport = 0;		lport = 0;		laddr.s_addr = 0;		if (cmd != PRC_HOSTDEAD)			notify = in_rtchange;	}	errno = inetctlerrmap[cmd];	s = splnet();	for (inp = head->lh_first; inp != NULL;) {		if (inp->inp_faddr.s_addr != faddr.s_addr ||		    inp->inp_socket == 0 ||		    (lport && inp->inp_lport != lport) ||		    (laddr.s_addr && inp->inp_laddr.s_addr != laddr.s_addr) ||		    (fport && inp->inp_fport != fport)) {			inp = inp->inp_list.le_next;			continue;		}		oinp = inp;		inp = inp->inp_list.le_next;		if (notify)			(*notify)(oinp, errno);	}	splx(s);}/* * Check for alternatives when higher level complains * about service problems.  For now, invalidate cached * routing information.  If the route was created dynamically * (by a redirect), time to try a default gateway again. */voidin_losing(inp)	struct inpcb *inp;{	register struct rtentry *rt;	struct rt_addrinfo info;#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_WARNING event */    WV_NET_MARKER_0 (NET_CORE_EVENT, WV_NET_WARNING, 7, 10,                      WV_NETEVENT_TCPTIMER_ROUTEDROP)#endif  /* INCLUDE_WVNET */#endif	if ((rt = inp->inp_route.ro_rt)) {		inp->inp_route.ro_rt = 0;		bzero((caddr_t)&info, sizeof(info));		info.rti_info[RTAX_DST] =			(struct sockaddr *)&inp->inp_route.ro_dst;		info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;		info.rti_info[RTAX_NETMASK] = rt_mask(rt);                if (rtMissMsgHook)                    (*rtMissMsgHook) (RTM_LOSING, &info, rt->rt_flags, 0);                /*                 * Remove the route if appropriate. Do not report the change                 * since the preceding hook generates both types of messages.                 */		if (rt->rt_flags & RTF_DYNAMIC)                    rtrequestDelEqui (rt_key(rt),rt_mask(rt), rt->rt_gateway,                                      rt->rt_flags, RT_PROTO_GET(rt_key(rt)),                                      FALSE, FALSE, (ROUTE_ENTRY **)0);		else		/*		 * A new route can be allocated		 * the next time output is attempted.		 */			rtfree(rt);	}}/* * After a routing change, flush old routing * and allocate a (hopefully) better one. */voidin_rtchange(inp, error)	register struct inpcb *inp;	int error;{	if (inp->inp_route.ro_rt) {		rtfree(inp->inp_route.ro_rt);		inp->inp_route.ro_rt = 0;		/*		 * A new route can be allocated the next time		 * output is attempted.		 */	}}struct inpcb *in_pcblookup(pcbinfo, faddr, fport_arg, laddr, lport_arg, wild_okay)	struct inpcbinfo *pcbinfo;	struct in_addr faddr, laddr;	u_int fport_arg, lport_arg;	int wild_okay;{	register struct inpcb *inp, *match = NULL;	int matchwild = 3, wildcard;	u_short fport = fport_arg, lport = lport_arg;	int s;	s = splnet();	for (inp = pcbinfo->listhead->lh_first; inp != NULL; inp = inp->inp_list.le_next) {		if (inp->inp_lport != lport)			continue;		wildcard = 0;		if (inp->inp_faddr.s_addr != INADDR_ANY) {			if (faddr.s_addr == INADDR_ANY)				wildcard++;			else if (inp->inp_faddr.s_addr != faddr.s_addr ||			    inp->inp_fport != fport)				continue;		} else {			if (faddr.s_addr != INADDR_ANY)				wildcard++;		}		if (inp->inp_laddr.s_addr != INADDR_ANY) {			if (laddr.s_addr == INADDR_ANY)				wildcard++;			else if (inp->inp_laddr.s_addr != laddr.s_addr)				continue;		} else {			if (laddr.s_addr != INADDR_ANY)				wildcard++;		}		if (wildcard && wild_okay == 0)			continue;		if (wildcard < matchwild) {			match = inp;			matchwild = wildcard;			if (matchwild == 0) {				break;			}		}	}	splx(s);	return (match);}/* * Lookup PCB in hash list. */struct inpcb *in_pcblookuphash(pcbinfo, faddr, fport_arg, laddr, lport_arg, wildcard)	struct inpcbinfo *pcbinfo;	struct in_addr faddr, laddr;	u_int fport_arg, lport_arg;	int wildcard;{	struct inpcbhead *head;	register struct inpcb *inp;	u_short fport = fport_arg, lport = lport_arg;	int s;	s = splnet();	/*	 * First look for an exact match.	 */	head = &pcbinfo->hashbase[INP_PCBHASH(faddr.s_addr, lport, fport, pcbinfo->hashmask)];	for (inp = head->lh_first; inp != NULL; inp = inp->inp_hash.le_next) {		if (inp->inp_faddr.s_addr == faddr.s_addr &&		    inp->inp_fport == fport && inp->inp_lport == lport &&		    inp->inp_laddr.s_addr == laddr.s_addr)			goto found;	}	if (wildcard) {		struct inpcb *local_wild = NULL;		head = &pcbinfo->hashbase[INP_PCBHASH(INADDR_ANY, lport, 0, pcbinfo->hashmask)];		for (inp = head->lh_first; inp != NULL; inp = inp->inp_hash.le_next) {			if (inp->inp_faddr.s_addr == INADDR_ANY &&			    inp->inp_fport == 0 && inp->inp_lport == lport) {				if (inp->inp_laddr.s_addr == laddr.s_addr)					goto found;				else if (inp->inp_laddr.s_addr == INADDR_ANY)					local_wild = inp;			}		}		if (local_wild != NULL) {			inp = local_wild;			goto found;		}	}	splx(s);	return (NULL);found:	/*	 * Move PCB to head of this hash chain so that it can be	 * found more quickly in the future.	 * XXX - this is a pessimization on machines with few	 * concurrent connections.	 */	if (inp != head->lh_first) {		LIST_REMOVE(inp, inp_hash);		LIST_INSERT_HEAD(head, inp, inp_hash);	}	splx(s);	return (inp);}/* * Insert PCB into hash chain. Must be called at splnet. */voidin_pcbinshash(inp)	struct inpcb *inp;{	struct inpcbhead *head;	head = &inp->inp_pcbinfo->hashbase[INP_PCBHASH(inp->inp_faddr.s_addr,		 inp->inp_lport, inp->inp_fport, inp->inp_pcbinfo->hashmask)];	LIST_INSERT_HEAD(head, inp, inp_hash);}voidin_pcbrehash(inp)	struct inpcb *inp;{	struct inpcbhead *head;	int s;	s = splnet();	LIST_REMOVE(inp, inp_hash);	head = &inp->inp_pcbinfo->hashbase[INP_PCBHASH(inp->inp_faddr.s_addr,		inp->inp_lport, inp->inp_fport, inp->inp_pcbinfo->hashmask)];	LIST_INSERT_HEAD(head, inp, inp_hash);	splx(s);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人一级电影| 欧美一区二区福利在线| 成人国产电影网| 国产尤物一区二区| 国内精品自线一区二区三区视频| 婷婷中文字幕综合| 一区二区三区国产精品| 亚洲欧美日韩综合aⅴ视频| 国产精品久久毛片| 国产精品久久久久久久浪潮网站| 国产女主播视频一区二区| 精品sm在线观看| 久久久久久亚洲综合| 久久日韩粉嫩一区二区三区| 久久精品夜夜夜夜久久| 国产精品色哟哟网站| 中文成人综合网| 国产精品国产精品国产专区不蜜| 欧美国产禁国产网站cc| 国产精品久久久久久久第一福利| 中文字幕日本不卡| 亚洲男人天堂一区| 日韩电影免费在线看| 久久99精品国产| 国产成人99久久亚洲综合精品| 成人av网站在线观看免费| 日本精品一区二区三区高清| 欧美日韩国产123区| 欧美精品一区二区久久婷婷| 国产精品私房写真福利视频| 亚洲精品日韩一| 日本欧美一区二区| 成人午夜激情在线| 欧美性感一类影片在线播放| 欧美成人在线直播| 国产精品网站在线播放| 亚洲一区二区综合| 国产麻豆一精品一av一免费| 91色婷婷久久久久合中文| 91精品中文字幕一区二区三区 | 国产亚洲精品免费| 中文字幕亚洲区| 天天综合色天天综合色h| 裸体在线国模精品偷拍| 国产成人综合在线| 欧美色视频在线观看| 欧美v国产在线一区二区三区| 日韩一区欧美一区| 蜜臀av亚洲一区中文字幕| av午夜精品一区二区三区| 欧美精品久久一区二区三区| 国产亚洲综合色| 亚洲成a人在线观看| 国产成人亚洲精品青草天美| av爱爱亚洲一区| 日韩一级高清毛片| 亚洲视频1区2区| 久久国产婷婷国产香蕉| 色狠狠综合天天综合综合| 日韩欧美视频在线| 亚洲综合偷拍欧美一区色| 麻豆91精品视频| 欧美三级在线看| 国产精品私人影院| 国内久久精品视频| 制服丝袜激情欧洲亚洲| 欧美一区三区四区| 国产女主播在线一区二区| 日韩不卡免费视频| 欧洲一区二区av| 国产三级欧美三级日产三级99| 午夜精品久久久久久久久| 91毛片在线观看| 欧美激情综合网| 卡一卡二国产精品| 欧美亚洲动漫另类| 亚洲乱码国产乱码精品精可以看| 狠狠色伊人亚洲综合成人| 91.com视频| 亚洲地区一二三色| 色天天综合久久久久综合片| 欧美激情一区二区| 国产一区二区三区在线观看免费视频 | 欧美丰满嫩嫩电影| 亚洲欧美日韩国产成人精品影院| 国产91丝袜在线播放| 久久亚洲一级片| 麻豆国产一区二区| 欧美一区二区三区系列电影| 亚洲综合免费观看高清完整版在线| 国产成人综合在线观看| 久久网站热最新地址| 久久国内精品视频| 日韩精品一区国产麻豆| 亚洲观看高清完整版在线观看| 99精品一区二区三区| 136国产福利精品导航| 99久久精品国产网站| 国产精品美女久久久久久久| 成人视屏免费看| 欧美国产欧美综合| 成人午夜电影网站| 国产精品国产三级国产aⅴ无密码| 粉嫩av一区二区三区在线播放| 国产目拍亚洲精品99久久精品| 国模无码大尺度一区二区三区| 精品成人私密视频| 国产精品一区二区果冻传媒| 久久久噜噜噜久久中文字幕色伊伊 | 久久亚区不卡日本| 国产乱人伦精品一区二区在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 成人黄色免费短视频| 欧美国产精品一区| 99久久亚洲一区二区三区青草 | 日韩影院在线观看| 欧美不卡视频一区| 久久成人免费日本黄色| 日韩精品中文字幕一区| 国产乱理伦片在线观看夜一区| 久久久五月婷婷| 懂色av噜噜一区二区三区av| 国产精品日产欧美久久久久| 91丨九色porny丨蝌蚪| 亚洲一区免费观看| 日韩午夜在线播放| 国产成人精品亚洲日本在线桃色| 国产精品护士白丝一区av| 色999日韩国产欧美一区二区| 亚洲午夜一区二区三区| 欧美xxxx在线观看| 不卡av在线网| 亚洲成人久久影院| 精品美女在线观看| www.av亚洲| 日韩精品五月天| 国产亚洲精品福利| 欧美在线观看视频一区二区三区| 日本一不卡视频| 国产欧美精品一区二区色综合朱莉| 91视频com| 精品一区二区三区蜜桃| 18成人在线视频| 日韩一级欧美一级| 成人sese在线| 亚洲一区二区三区中文字幕| 精品区一区二区| 91女厕偷拍女厕偷拍高清| 日韩av在线播放中文字幕| 国产欧美在线观看一区| 欧洲人成人精品| 国内精品久久久久影院一蜜桃| 亚洲免费资源在线播放| www欧美成人18+| 欧美天天综合网| 国产成人激情av| 日韩综合一区二区| 日本欧美久久久久免费播放网| www.欧美日韩| 亚洲午夜久久久久久久久电影网| 国产 欧美在线| 婷婷开心久久网| 国产日韩v精品一区二区| 欧美在线播放高清精品| 国产美女在线观看一区| 中文字幕不卡三区| 欧美肥胖老妇做爰| 成人开心网精品视频| 性久久久久久久久| 国产精品美女久久久久久久久| 91女神在线视频| 国产河南妇女毛片精品久久久| 中文字幕高清不卡| 91精品久久久久久久99蜜桃 | 国产日产欧美精品一区二区三区| 6080国产精品一区二区| 91在线精品秘密一区二区| 久久国产欧美日韩精品| 亚洲国产乱码最新视频 | 日韩欧美在线不卡| 91久久精品一区二区三| 玖玖九九国产精品| 性做久久久久久免费观看 | 韩日av一区二区| 秋霞午夜鲁丝一区二区老狼| 亚洲伦理在线精品| 久久精品人人做人人爽人人| 欧美一区二区三区视频| 欧美日韩视频在线第一区 | 91原创在线视频| 粉嫩绯色av一区二区在线观看| 韩国av一区二区三区四区| 日日欢夜夜爽一区| 五月激情综合色| 亚洲综合丝袜美腿| 亚洲一区在线观看免费| 亚洲综合久久av| 一区二区免费在线播放| 亚洲精品欧美激情| 亚洲靠逼com|