| version 1.29, 1997/08/27 07:10:01 |
version 1.29.4.1, 1998/01/30 19:24:12 |
| Line 79 socreate(dom, aso, type, proto) |
|
| Line 79 socreate(dom, aso, type, proto) |
|
| return (EPROTOTYPE); |
return (EPROTOTYPE); |
| MALLOC(so, struct socket *, sizeof(*so), M_SOCKET, M_WAIT); |
MALLOC(so, struct socket *, sizeof(*so), M_SOCKET, M_WAIT); |
| bzero((caddr_t)so, sizeof(*so)); |
bzero((caddr_t)so, sizeof(*so)); |
| |
TAILQ_INIT(&so->so_q0); |
| |
TAILQ_INIT(&so->so_q); |
| so->so_type = type; |
so->so_type = type; |
| so->so_proto = prp; |
so->so_proto = prp; |
| error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0, |
error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0, |
| Line 127 solisten(so, backlog) |
|
| Line 129 solisten(so, backlog) |
|
| splx(s); |
splx(s); |
| return (error); |
return (error); |
| } |
} |
| if (so->so_q == 0) |
if (so->so_q.tqh_first == NULL) |
| so->so_options |= SO_ACCEPTCONN; |
so->so_options |= SO_ACCEPTCONN; |
| if (backlog < 0) |
if (backlog < 0) |
| backlog = 0; |
backlog = 0; |
|
|
| int error = 0; |
int error = 0; |
| |
|
| if (so->so_options & SO_ACCEPTCONN) { |
if (so->so_options & SO_ACCEPTCONN) { |
| while (so->so_q0) |
while (so->so_q0.tqh_first) |
| (void) soabort(so->so_q0); |
(void) soabort(so->so_q0.tqh_first); |
| while (so->so_q) |
while (so->so_q.tqh_first) |
| (void) soabort(so->so_q); |
(void) soabort(so->so_q.tqh_first); |
| } |
} |
| if (so->so_pcb == 0) |
if (so->so_pcb == 0) |
| goto discard; |
goto discard; |
|
|
| while (so->so_state & SS_ISCONNECTED) { |
while (so->so_state & SS_ISCONNECTED) { |
| error = tsleep((caddr_t)&so->so_timeo, |
error = tsleep((caddr_t)&so->so_timeo, |
| PSOCK | PCATCH, netcls, |
PSOCK | PCATCH, netcls, |
| so->so_linger); |
so->so_linger * hz); |
| if (error) |
if (error) |
| break; |
break; |
| } |
} |