SCCS-vsn: sys/netinet/in_pcb.c 4.13
-/* in_pcb.c 4.12 81/12/03 */
+/* in_pcb.c 4.13 81/12/11 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
+struct in_addr zeroin_addr;
/*
* Allocate a protocol control block, space
/*
* Allocate a protocol control block, space
struct sockaddr_in *sin;
{
struct mbuf *m;
struct sockaddr_in *sin;
{
struct mbuf *m;
- register struct inpcb *inp, *xp;
+ register struct inpcb *inp;
COUNT(IN_PCBATTACH);
if (sin) {
COUNT(IN_PCBATTACH);
if (sin) {
return (EADDRNOTAVAIL);
lport = sin->sin_port;
if (lport &&
return (EADDRNOTAVAIL);
lport = sin->sin_port;
if (lport &&
- in_pcblookup(head, 0, 0, sin->sin_addr.s_addr, lport))
+ in_pcblookup(head, zeroin_addr, 0, sin->sin_addr, lport))
return (EADDRINUSE);
} else {
ifp = if_ifwithaddr(ifnet->if_addr);
return (EADDRINUSE);
} else {
ifp = if_ifwithaddr(ifnet->if_addr);
if (head->inp_lport++ < 1024)
head->inp_lport = 1024;
lport = htons(head->inp_lport);
if (head->inp_lport++ < 1024)
head->inp_lport = 1024;
lport = htons(head->inp_lport);
- } while (in_pcblookup(head, 0, 0, inp->inp_laddr, lport));
+ } while (in_pcblookup(head, zeroin_addr, 0, inp->inp_laddr, lport));
inp->inp_lport = lport;
inp->inp_socket = so;
insque(inp, head);
inp->inp_lport = lport;
inp->inp_socket = so;
insque(inp, head);
if (sin->sin_addr.s_addr == 0 || sin->sin_port == 0)
return (EADDRNOTAVAIL);
xp = in_pcblookup(inp->inp_head, sin->sin_addr, sin->sin_port, inp->inp_laddr, inp->inp_lport);
if (sin->sin_addr.s_addr == 0 || sin->sin_port == 0)
return (EADDRNOTAVAIL);
xp = in_pcblookup(inp->inp_head, sin->sin_addr, sin->sin_port, inp->inp_laddr, inp->inp_lport);
+ if (xp->inp_faddr.s_addr)
return (EADDRINUSE);
inp->inp_faddr = sin->sin_addr;
inp->inp_fport = sin->sin_port;
return (EADDRINUSE);
inp->inp_faddr = sin->sin_addr;
inp->inp_fport = sin->sin_port;