git: tcp: Allow socket/syncache inheritance between SO_REUSEPORT listen sockets
Sepherosa Ziehau
sephe at crater.dragonflybsd.org
Thu Aug 1 01:13:56 PDT 2013
commit 02ad2f0b874fb0a45eb69750219f79f5e8982272
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date: Wed Jul 31 16:31:02 2013 +0800
tcp: Allow socket/syncache inheritance between SO_REUSEPORT listen sockets
This is intend to address the drawback of the following SO_REUSEPORT tcp
listen socket usage model:
Multiple processses create their own listen socket w/ SO_REUSEPORT, if
one of the process crashed, i.e. the listen socket is closed, then any
syncache, pending sockets on the completion and incompletion queues
are just dropped.
Compared w/ multiple processes sharing the same tcp listen socket, this
drawback could be unacceptable (e.g. when nginx reload configure).
This commit addresses this drawback by allowing another tcp listen socket
in the same local group, i.e. bound to the same listen port and address,
to inherit the syncache and pending sockets of the to-be-closed tcp
listen socket. The tcp listen socket, which inherits the syncache and
pending sockets, is the last tcp listen socket in the same local group.
Summary of changes:
sys/kern/uipc_socket.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++
sys/netinet/in_pcb.c | 40 +++++++++++++++++++++++++++
sys/netinet/in_pcb.h | 2 ++
sys/netinet/tcp_subr.c | 39 ++++++++++++++++++++++++---
sys/netinet/tcp_syncache.c | 4 +--
sys/netinet/tcp_var.h | 2 +-
sys/sys/socketvar.h | 1 +
7 files changed, 149 insertions(+), 6 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/02ad2f0b874fb0a45eb69750219f79f5e8982272
--
DragonFly BSD source repository
More information about the Commits
mailing list