projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
date and time created 81/11/29 22:19:36 by wnj
[unix-history]
/
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
f0ecb11
..
f41c868
100644
(file)
--- a/
usr/src/sys/netinet/in_pcb.c
+++ b/
usr/src/sys/netinet/in_pcb.c
@@
-1,4
+1,4
@@
-/* in_pcb.c 4.
6 81/11/20
*/
+/* in_pcb.c 4.
10 81/11/29
*/
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
@@
-7,10
+7,10
@@
#include "../h/mbuf.h"
#include "../h/socket.h"
#include "../h/socketvar.h"
#include "../h/mbuf.h"
#include "../h/socket.h"
#include "../h/socketvar.h"
-#include "../net/in
et
.h"
-#include "../net/in
et
_systm.h"
+#include "../net/in.h"
+#include "../net/in_systm.h"
#include "../net/if.h"
#include "../net/if.h"
-#include "../net/in
et
_pcb.h"
+#include "../net/in_pcb.h"
/*
* Allocate a protocol control block, space
/*
* Allocate a protocol control block, space
@@
-24,7
+24,7
@@
in_pcballoc(so, head, sndcc, rcvcc, sin)
struct sockaddr_in *sin;
{
struct mbuf *m;
struct sockaddr_in *sin;
{
struct mbuf *m;
- register struct inpcb *inp;
+ register struct inpcb *inp
, *xp
;
struct ifnet *ifp;
u_long lport;
struct ifnet *ifp;
u_long lport;
@@
-36,12
+36,12
@@
in_pcballoc(so, head, sndcc, rcvcc, sin)
return (EADDRNOTAVAIL);
lport = sin->sin_port;
if (lport) {
return (EADDRNOTAVAIL);
lport = sin->sin_port;
if (lport) {
-
in
p = head->inp_next;
- for (;
inp != head; inp = in
p->inp_next)
- if (
in
p->inp_laddr.s_addr ==
+
x
p = head->inp_next;
+ for (;
xp != head; xp = x
p->inp_next)
+ if (
x
p->inp_laddr.s_addr ==
sin->sin_addr.s_addr &&
sin->sin_addr.s_addr &&
-
in
p->inp_lport == lport &&
-
in
p->inp_faddr.s_addr == 0)
+
x
p->inp_lport == lport &&
+
x
p->inp_faddr.s_addr == 0)
return (EADDRINUSE);
}
} else {
return (EADDRINUSE);
}
} else {
@@
-50,7
+50,7
@@
in_pcballoc(so, head, sndcc, rcvcc, sin)
}
m = m_getclr(M_WAIT);
if (m == 0)
}
m = m_getclr(M_WAIT);
if (m == 0)
- return (
0
);
+ return (
ENOBUFS
);
if (sbreserve(&so->so_snd, sndcc) == 0)
goto bad;
if (sbreserve(&so->so_rcv, rcvcc) == 0)
if (sbreserve(&so->so_snd, sndcc) == 0)
goto bad;
if (sbreserve(&so->so_rcv, rcvcc) == 0)
@@
-62,13
+62,14
@@
in_pcballoc(so, head, sndcc, rcvcc, sin)
again:
if (head->inp_lport++ < 1024)
head->inp_lport = 1024;
again:
if (head->inp_lport++ < 1024)
head->inp_lport = 1024;
- for (
inp = head->inp_next; inp != head; inp = in
p->inp_next)
- if (
in
p->inp_lport == head->inp_lport)
+ for (
xp = head->inp_next; xp != head; xp = x
p->inp_next)
+ if (
x
p->inp_lport == head->inp_lport)
goto again;
lport = head->inp_lport;
gotport:
goto again;
lport = head->inp_lport;
gotport:
+ inp->inp_socket = so;
inp->inp_lport = lport;
inp->inp_lport = lport;
- insque(
head, inp
);
+ insque(
inp, head
);
so->so_pcb = (caddr_t)inp;
sin = (struct sockaddr_in *)&so->so_addr;
sin->sin_family = AF_INET;
so->so_pcb = (caddr_t)inp;
sin = (struct sockaddr_in *)&so->so_addr;
sin->sin_family = AF_INET;
@@
-102,10
+103,9
@@
in_pcbfree(inp)
{
struct socket *so = inp->inp_socket;
{
struct socket *so = inp->inp_socket;
- if (so->so_state & SS_USERGONE)
- sofree(so);
- else
- so->so_pcb = 0;
+ so->so_pcb = 0;
+ sofree(so);
+ remque(inp);
(void) m_free(dtom(inp));
}
(void) m_free(dtom(inp));
}