diff options
| author | Jonathan Lemon <jlemon@FreeBSD.org> | 2001-02-14 02:09:11 +0000 |
|---|---|---|
| committer | Jonathan Lemon <jlemon@FreeBSD.org> | 2001-02-14 02:09:11 +0000 |
| commit | 2fd7d53d36b846109e5cbef2538ebff34324f1c2 (patch) | |
| tree | eb0c9cf6c1b8efda70a073bf6f8e287c836996c4 | |
| parent | cd8148eeb659fa1707ca1be0def8150c7a719dee (diff) | |
Notes
| -rw-r--r-- | sys/kern/uipc_socket.c | 7 | ||||
| -rw-r--r-- | sys/kern/uipc_syscalls.c | 15 |
2 files changed, 16 insertions, 6 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 62459df95047..d8a95cf2efd5 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -365,11 +365,8 @@ soaccept(so, nam) so->so_state &= ~SS_NOFDREF; if ((so->so_state & SS_ISDISCONNECTED) == 0) error = (*so->so_proto->pr_usrreqs->pru_accept)(so, nam); - else { - if (nam) - *nam = 0; - error = 0; - } + else + error = ECONNABORTED; splx(s); return (error); } diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 43c6c27f01f1..6aed0237ed1e 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -290,7 +290,19 @@ accept1(p, uap, compat) nfp->f_ops = &socketops; nfp->f_type = DTYPE_SOCKET; sa = 0; - (void) soaccept(so, &sa); + error = soaccept(so, &sa); + if (error) { + /* + * return a namelen of zero for older code which might + * ignore the return value from accept. + */ + if (uap->name != NULL) { + namelen = 0; + (void) copyout((caddr_t)&namelen, + (caddr_t)uap->anamelen, sizeof(*uap->anamelen)); + } + goto noconnection; + } if (sa == NULL) { namelen = 0; if (uap->name) @@ -314,6 +326,7 @@ gotnoname: error = copyout((caddr_t)&namelen, (caddr_t)uap->anamelen, sizeof (*uap->anamelen)); } +noconnection: if (sa) FREE(sa, M_SONAME); |
