diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-10-30 19:44:40 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-10-30 19:44:40 +0000 |
commit | 49831ed8da06ffadf684484671b4561c9ac55f9f (patch) | |
tree | 779e3d7a8028f1ac29696c62ad8b70ba7bc70d2e /sys/kern/uipc_usrreq.c | |
parent | 1d93f083bf03400439b86271732e2b3f17ba284c (diff) | |
download | FreeBSD-src-49831ed8da06ffadf684484671b4561c9ac55f9f.zip FreeBSD-src-49831ed8da06ffadf684484671b4561c9ac55f9f.tar.gz |
Push the assignment of a new or updated so_qlimit from solisten()
following the protocol pru_listen() call to solisten_proto(), so
that it occurs under the socket lock acquisition that also sets
SO_ACCEPTCONN. This requires passing the new backlog parameter
to the protocol, which also allows the protocol to be aware of
changes in queue limit should it wish to do something about the
new queue limit. This continues a move towards the socket layer
acting as a library for the protocol.
Bump __FreeBSD_version due to a change in the in-kernel protocol
interface. This change has been tested with IPv4 and UNIX domain
sockets, but not other protocols.
Diffstat (limited to 'sys/kern/uipc_usrreq.c')
-rw-r--r-- | sys/kern/uipc_usrreq.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index ac23154..286f07c 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -126,7 +126,8 @@ static void unp_mark(struct file *); static void unp_discard(struct file *); static void unp_freerights(struct file **, int); static int unp_internalize(struct mbuf **, struct thread *); -static int unp_listen(struct socket *, struct unpcb *, struct thread *); +static int unp_listen(struct socket *, struct unpcb *, int, + struct thread *); static int uipc_abort(struct socket *so) @@ -275,7 +276,7 @@ uipc_disconnect(struct socket *so) } static int -uipc_listen(struct socket *so, struct thread *td) +uipc_listen(struct socket *so, int backlog, struct thread *td) { struct unpcb *unp; int error; @@ -286,7 +287,7 @@ uipc_listen(struct socket *so, struct thread *td) UNP_UNLOCK(); return (EINVAL); } - error = unp_listen(so, unp, td); + error = unp_listen(so, unp, backlog, td); UNP_UNLOCK(); return (error); } @@ -1803,7 +1804,8 @@ unp_dispose(struct mbuf *m) } static int -unp_listen(struct socket *so, struct unpcb *unp, struct thread *td) +unp_listen(struct socket *so, struct unpcb *unp, int backlog, + struct thread *td) { int error; @@ -1814,7 +1816,7 @@ unp_listen(struct socket *so, struct unpcb *unp, struct thread *td) if (error == 0) { cru2x(td->td_ucred, &unp->unp_peercred); unp->unp_flags |= UNP_HAVEPCCACHED; - solisten_proto(so); + solisten_proto(so, backlog); } SOCK_UNLOCK(so); return (error); |