X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/1a3dbf930af83e32704c511b73cf350e2e5041ce..5485e062213aa576f431ef766f639e248716dfe8:/usr/src/sys/netinet/in_pcb.c diff --git a/usr/src/sys/netinet/in_pcb.c b/usr/src/sys/netinet/in_pcb.c index c79eea0766..b62bc78d83 100644 --- a/usr/src/sys/netinet/in_pcb.c +++ b/usr/src/sys/netinet/in_pcb.c @@ -1,4 +1,4 @@ -/* in_pcb.c 4.13 81/12/11 */ +/* in_pcb.c 4.16 82/02/15 */ #include "../h/param.h" #include "../h/systm.h" @@ -66,18 +66,20 @@ COUNT(IN_PCBATTACH); if (sin) { if (sin->sin_family != AF_INET) return (EAFNOSUPPORT); + if (ifnet && sin->sin_addr.s_addr == 0) + sin->sin_addr = ifnet->if_addr; ifp = if_ifwithaddr(sin->sin_addr); - if (ifp == 0) - return (EADDRNOTAVAIL); lport = sin->sin_port; if (lport && in_pcblookup(head, zeroin_addr, 0, sin->sin_addr, lport)) return (EADDRINUSE); } else { - ifp = if_ifwithaddr(ifnet->if_addr); + ifp = ifnet; lport = 0; } - m = m_getclr(0); + if (ifp == 0) + return (EADDRNOTAVAIL); + m = m_getclr(M_DONTWAIT); if (m == 0) return (ENOBUFS); if (sbreserve(&so->so_snd, sndcc) == 0) @@ -128,6 +130,17 @@ COUNT(IN_PCBCONNECT); return (0); } +in_pcbconnaddr(inp, sp) + struct inpcb *inp; + struct sockaddr *sp; +{ + register struct sockaddr_in *sin = (struct sockaddr_in *)sp; + + sin->sin_family = AF_INET; + sin->sin_port = inp->inp_fport; + sin->sin_addr = inp->inp_faddr; +} + in_pcbdisconnect(inp) struct inpcb *inp; {