version 1.44.2.2, 1999/06/21 14:46:36 |
version 1.48.2.3, 2001/02/11 19:16:50 |
|
|
|
|
struct pool socket_pool; |
struct pool socket_pool; |
|
|
|
extern int somaxconn; /* patchable (XXX sysctl) */ |
|
int somaxconn = SOMAXCONN; |
|
|
void |
void |
soinit() |
soinit() |
{ |
{ |
|
|
socreate(dom, aso, type, proto) |
socreate(dom, aso, type, proto) |
int dom; |
int dom; |
struct socket **aso; |
struct socket **aso; |
register int type; |
int type; |
int proto; |
int proto; |
{ |
{ |
struct proc *p = curproc; /* XXX */ |
struct proc *p = curproc; /* XXX */ |
register struct protosw *prp; |
struct protosw *prp; |
register struct socket *so; |
struct socket *so; |
register int error; |
int error; |
int s; |
int s; |
|
|
if (proto) |
if (proto) |
Line 123 socreate(dom, aso, type, proto) |
|
Line 126 socreate(dom, aso, type, proto) |
|
} |
} |
|
|
int |
int |
sobind(so, nam) |
sobind(so, nam, p) |
struct socket *so; |
struct socket *so; |
struct mbuf *nam; |
struct mbuf *nam; |
|
struct proc *p; |
{ |
{ |
struct proc *p = curproc; /* XXX */ |
|
int s = splsoftnet(); |
int s = splsoftnet(); |
int error; |
int error; |
|
|
|
|
|
|
int |
int |
solisten(so, backlog) |
solisten(so, backlog) |
register struct socket *so; |
struct socket *so; |
int backlog; |
int backlog; |
{ |
{ |
int s = splsoftnet(), error; |
int s = splsoftnet(), error; |
Line 154 solisten(so, backlog) |
|
Line 157 solisten(so, backlog) |
|
so->so_options |= SO_ACCEPTCONN; |
so->so_options |= SO_ACCEPTCONN; |
if (backlog < 0) |
if (backlog < 0) |
backlog = 0; |
backlog = 0; |
so->so_qlimit = min(backlog, SOMAXCONN); |
so->so_qlimit = min(backlog, somaxconn); |
splx(s); |
splx(s); |
return (0); |
return (0); |
} |
} |
|
|
void |
void |
sofree(so) |
sofree(so) |
register struct socket *so; |
struct socket *so; |
{ |
{ |
|
|
if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0) |
if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0) |
|
|
*/ |
*/ |
int |
int |
soclose(so) |
soclose(so) |
register struct socket *so; |
struct socket *so; |
{ |
{ |
struct socket *so2; |
struct socket *so2; |
int s = splsoftnet(); /* conservative */ |
int s = splsoftnet(); /* conservative */ |
|
|
|
|
int |
int |
soaccept(so, nam) |
soaccept(so, nam) |
register struct socket *so; |
struct socket *so; |
struct mbuf *nam; |
struct mbuf *nam; |
{ |
{ |
int s = splsoftnet(); |
int s = splsoftnet(); |
int error; |
int error = 0; |
|
|
if ((so->so_state & SS_NOFDREF) == 0) |
if ((so->so_state & SS_NOFDREF) == 0) |
panic("soaccept: !NOFDREF"); |
panic("soaccept: !NOFDREF"); |
Line 268 soaccept(so, nam) |
|
Line 271 soaccept(so, nam) |
|
error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, |
error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, |
(struct mbuf *)0, nam, (struct mbuf *)0, (struct proc *)0); |
(struct mbuf *)0, nam, (struct mbuf *)0, (struct proc *)0); |
else |
else |
error = 0; |
error = ECONNABORTED; |
|
|
splx(s); |
splx(s); |
return (error); |
return (error); |
} |
} |
|
|
int |
int |
soconnect(so, nam) |
soconnect(so, nam) |
register struct socket *so; |
struct socket *so; |
struct mbuf *nam; |
struct mbuf *nam; |
{ |
{ |
struct proc *p = curproc; /* XXX */ |
struct proc *p = curproc; /* XXX */ |
Line 304 soconnect(so, nam) |
|
Line 308 soconnect(so, nam) |
|
|
|
int |
int |
soconnect2(so1, so2) |
soconnect2(so1, so2) |
register struct socket *so1; |
struct socket *so1; |
struct socket *so2; |
struct socket *so2; |
{ |
{ |
int s = splsoftnet(); |
int s = splsoftnet(); |
Line 319 soconnect2(so1, so2) |
|
Line 323 soconnect2(so1, so2) |
|
|
|
int |
int |
sodisconnect(so) |
sodisconnect(so) |
register struct socket *so; |
struct socket *so; |
{ |
{ |
int s = splsoftnet(); |
int s = splsoftnet(); |
int error; |
int error; |
|
|
*/ |
*/ |
int |
int |
sosend(so, addr, uio, top, control, flags) |
sosend(so, addr, uio, top, control, flags) |
register struct socket *so; |
struct socket *so; |
struct mbuf *addr; |
struct mbuf *addr; |
struct uio *uio; |
struct uio *uio; |
struct mbuf *top; |
struct mbuf *top; |
Line 369 sosend(so, addr, uio, top, control, flag |
|
Line 373 sosend(so, addr, uio, top, control, flag |
|
{ |
{ |
struct proc *p = curproc; /* XXX */ |
struct proc *p = curproc; /* XXX */ |
struct mbuf **mp; |
struct mbuf **mp; |
register struct mbuf *m; |
struct mbuf *m; |
register long space, len, resid; |
long space, len, resid; |
int clen = 0, error, s, dontroute, mlen; |
int clen = 0, error, s, dontroute, mlen; |
int atomic = sosendallatonce(so) || top; |
int atomic = sosendallatonce(so) || top; |
|
|
|
|
*/ |
*/ |
int |
int |
soreceive(so, paddr, uio, mp0, controlp, flagsp) |
soreceive(so, paddr, uio, mp0, controlp, flagsp) |
register struct socket *so; |
struct socket *so; |
struct mbuf **paddr; |
struct mbuf **paddr; |
struct uio *uio; |
struct uio *uio; |
struct mbuf **mp0; |
struct mbuf **mp0; |
struct mbuf **controlp; |
struct mbuf **controlp; |
int *flagsp; |
int *flagsp; |
{ |
{ |
register struct mbuf *m, **mp; |
struct mbuf *m, **mp; |
register int flags, len, error, s, offset; |
int flags, len, error, s, offset; |
struct protosw *pr = so->so_proto; |
struct protosw *pr = so->so_proto; |
struct mbuf *nextrecord; |
struct mbuf *nextrecord; |
int moff, type = 0; |
int moff, type = 0; |
Line 872 soshutdown(so, how) |
|
Line 876 soshutdown(so, how) |
|
|
|
void |
void |
sorflush(so) |
sorflush(so) |
register struct socket *so; |
struct socket *so; |
{ |
{ |
register struct sockbuf *sb = &so->so_rcv; |
struct sockbuf *sb = &so->so_rcv; |
register struct protosw *pr = so->so_proto; |
struct protosw *pr = so->so_proto; |
register int s; |
int s; |
struct sockbuf asb; |
struct sockbuf asb; |
|
|
sb->sb_flags |= SB_NOINTR; |
sb->sb_flags |= SB_NOINTR; |
|
|
|
|
int |
int |
sosetopt(so, level, optname, m0) |
sosetopt(so, level, optname, m0) |
register struct socket *so; |
struct socket *so; |
int level, optname; |
int level, optname; |
struct mbuf *m0; |
struct mbuf *m0; |
{ |
{ |
int error = 0; |
int error = 0; |
register struct mbuf *m = m0; |
struct mbuf *m = m0; |
|
|
if (level != SOL_SOCKET) { |
if (level != SOL_SOCKET) { |
if (so->so_proto && so->so_proto->pr_ctloutput) |
if (so->so_proto && so->so_proto->pr_ctloutput) |
|
|
|
|
int |
int |
sogetopt(so, level, optname, mp) |
sogetopt(so, level, optname, mp) |
register struct socket *so; |
struct socket *so; |
int level, optname; |
int level, optname; |
struct mbuf **mp; |
struct mbuf **mp; |
{ |
{ |
register struct mbuf *m; |
struct mbuf *m; |
|
|
if (level != SOL_SOCKET) { |
if (level != SOL_SOCKET) { |
if (so->so_proto && so->so_proto->pr_ctloutput) { |
if (so->so_proto && so->so_proto->pr_ctloutput) { |
Line 1121 sogetopt(so, level, optname, mp) |
|
Line 1125 sogetopt(so, level, optname, mp) |
|
|
|
void |
void |
sohasoutofband(so) |
sohasoutofband(so) |
register struct socket *so; |
struct socket *so; |
{ |
{ |
struct proc *p; |
struct proc *p; |
|
|