| version 1.19, 1995/05/23 00:19:30 |
version 1.20, 1995/08/12 23:59:11 |
|
|
| struct socket *so; |
struct socket *so; |
| struct mbuf *nam; |
struct mbuf *nam; |
| { |
{ |
| int s = splnet(); |
int s = splsoftnet(); |
| int error; |
int error; |
| |
|
| error = |
error = |
| Line 121 solisten(so, backlog) |
|
| Line 121 solisten(so, backlog) |
|
| register struct socket *so; |
register struct socket *so; |
| int backlog; |
int backlog; |
| { |
{ |
| int s = splnet(), error; |
int s = splsoftnet(), error; |
| |
|
| error = |
error = |
| (*so->so_proto->pr_usrreq)(so, PRU_LISTEN, |
(*so->so_proto->pr_usrreq)(so, PRU_LISTEN, |
|
|
| soclose(so) |
soclose(so) |
| register struct socket *so; |
register struct socket *so; |
| { |
{ |
| int s = splnet(); /* conservative */ |
int s = splsoftnet(); /* conservative */ |
| int error = 0; |
int error = 0; |
| |
|
| if (so->so_options & SO_ACCEPTCONN) { |
if (so->so_options & SO_ACCEPTCONN) { |
|
|
| } |
} |
| |
|
| /* |
/* |
| * Must be called at splnet... |
* Must be called at splsoftnet... |
| */ |
*/ |
| int |
int |
| soabort(so) |
soabort(so) |
| Line 227 soaccept(so, nam) |
|
| Line 227 soaccept(so, nam) |
|
| register struct socket *so; |
register struct socket *so; |
| struct mbuf *nam; |
struct mbuf *nam; |
| { |
{ |
| int s = splnet(); |
int s = splsoftnet(); |
| int error; |
int error; |
| |
|
| if ((so->so_state & SS_NOFDREF) == 0) |
if ((so->so_state & SS_NOFDREF) == 0) |
| Line 249 soconnect(so, nam) |
|
| Line 249 soconnect(so, nam) |
|
| |
|
| if (so->so_options & SO_ACCEPTCONN) |
if (so->so_options & SO_ACCEPTCONN) |
| return (EOPNOTSUPP); |
return (EOPNOTSUPP); |
| s = splnet(); |
s = splsoftnet(); |
| /* |
/* |
| * If protocol is connection-based, can only connect once. |
* If protocol is connection-based, can only connect once. |
| * Otherwise, if connected, try to disconnect first. |
* Otherwise, if connected, try to disconnect first. |
| Line 272 soconnect2(so1, so2) |
|
| Line 272 soconnect2(so1, so2) |
|
| register struct socket *so1; |
register struct socket *so1; |
| struct socket *so2; |
struct socket *so2; |
| { |
{ |
| int s = splnet(); |
int s = splsoftnet(); |
| int error; |
int error; |
| |
|
| error = (*so1->so_proto->pr_usrreq)(so1, PRU_CONNECT2, |
error = (*so1->so_proto->pr_usrreq)(so1, PRU_CONNECT2, |
|
|
| sodisconnect(so) |
sodisconnect(so) |
| register struct socket *so; |
register struct socket *so; |
| { |
{ |
| int s = splnet(); |
int s = splsoftnet(); |
| int error; |
int error; |
| |
|
| if ((so->so_state & SS_ISCONNECTED) == 0) { |
if ((so->so_state & SS_ISCONNECTED) == 0) { |
|
|
| if (error = sblock(&so->so_snd, SBLOCKWAIT(flags))) |
if (error = sblock(&so->so_snd, SBLOCKWAIT(flags))) |
| goto out; |
goto out; |
| do { |
do { |
| s = splnet(); |
s = splsoftnet(); |
| if (so->so_state & SS_CANTSENDMORE) |
if (so->so_state & SS_CANTSENDMORE) |
| snderr(EPIPE); |
snderr(EPIPE); |
| if (so->so_error) |
if (so->so_error) |
|
|
| } while (space > 0 && atomic); |
} while (space > 0 && atomic); |
| if (dontroute) |
if (dontroute) |
| so->so_options |= SO_DONTROUTE; |
so->so_options |= SO_DONTROUTE; |
| s = splnet(); /* XXX */ |
s = splsoftnet(); /* XXX */ |
| error = (*so->so_proto->pr_usrreq)(so, |
error = (*so->so_proto->pr_usrreq)(so, |
| (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND, |
(flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND, |
| top, addr, control); |
top, addr, control); |
|
|
| restart: |
restart: |
| if (error = sblock(&so->so_rcv, SBLOCKWAIT(flags))) |
if (error = sblock(&so->so_rcv, SBLOCKWAIT(flags))) |
| return (error); |
return (error); |
| s = splnet(); |
s = splsoftnet(); |
| |
|
| m = so->so_rcv.sb_mb; |
m = so->so_rcv.sb_mb; |
| /* |
/* |
|
|
| if (mp == 0) { |
if (mp == 0) { |
| splx(s); |
splx(s); |
| error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio); |
error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio); |
| s = splnet(); |
s = splsoftnet(); |
| } else |
} else |
| uio->uio_resid -= len; |
uio->uio_resid -= len; |
| if (len == m->m_len - moff) { |
if (len == m->m_len - moff) { |