• Saied Kazemi's avatar
    Do not call listen() when SO_REUSEADDR is off · 1b4e9058
    Saied Kazemi authored
    For an established TCP connection, the send queue is restored in two
    steps: in step (1), we retransmit the data that was sent before but not
    yet acknowledged, and in step (2), we transmit the data that was never
    sent outside before.  The TCP_REPAIR option is disabled before step (2)
    and re-enabled after step (2) (without this patch).
    
    If the amount of data to be sent in step (2) is large, the TCP_REPAIR
    flag on the socket can remain off for some time (O(milliseconds)).  If a
    listen() is called on another socket bound to the same port during this
    time window, it fails. This is because -- turning TCP_REPAIR off clears
    the SO_REUSEADDR flag on the socket.
    
    This patch adds a mutex (reuseaddr_lock) per port number, so that a
    listen() on a port number does not happen while SO_REUSEADDR for another
    socket on the same port is off.
    
    Thanks to Amey Deshpande <ameyd@google.com> for debugging.
    Signed-off-by: 's avatarSaied Kazemi <saied@google.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    1b4e9058
Name
Last commit
Last update
..
asm-generic Loading commit data...
action-scripts.h Loading commit data...
aio.h Loading commit data...
bfd.h Loading commit data...
bug.h Loading commit data...
cgroup.h Loading commit data...
compiler.h Loading commit data...
config-base.h Loading commit data...
cpu.h Loading commit data...
cr-errno.h Loading commit data...
cr-service-const.h Loading commit data...
cr-service.h Loading commit data...
cr-show.h Loading commit data...
cr_options.h Loading commit data...
criu-log.h Loading commit data...
criu-plugin.h Loading commit data...
crtools.h Loading commit data...
err.h Loading commit data...
errno.h Loading commit data...
eventfd.h Loading commit data...
eventpoll.h Loading commit data...
fcntl.h Loading commit data...
fifo.h Loading commit data...
file-ids.h Loading commit data...
file-lock.h Loading commit data...
files-reg.h Loading commit data...
files.h Loading commit data...
fs-magic.h Loading commit data...
fsnotify.h Loading commit data...
image-desc.h Loading commit data...
image.h Loading commit data...
imgset.h Loading commit data...
inet_diag.h Loading commit data...
ipc_ns.h Loading commit data...
irmap.h Loading commit data...
kcmp-ids.h Loading commit data...
kcmp.h Loading commit data...
kerndat.h Loading commit data...
libnetlink.h Loading commit data...
list.h Loading commit data...
lock.h Loading commit data...
log.h Loading commit data...
magic.h Loading commit data...
mem.h Loading commit data...
mman.h Loading commit data...
mount.h Loading commit data...
namespaces.h Loading commit data...
net.h Loading commit data...
netfilter.h Loading commit data...
netlink_diag.h Loading commit data...
packet_diag.h Loading commit data...
page-pipe.h Loading commit data...
page-read.h Loading commit data...
page-xfer.h Loading commit data...
pagemap-cache.h Loading commit data...
parasite-syscall.h Loading commit data...
parasite.h Loading commit data...
pid.h Loading commit data...
pipes.h Loading commit data...
plugin.h Loading commit data...
posix-timer.h Loading commit data...
prctl.h Loading commit data...
proc_parse.h Loading commit data...
protobuf-desc.h Loading commit data...
protobuf.h Loading commit data...
pstree.h Loading commit data...
ptrace.h Loading commit data...
rbtree.h Loading commit data...
restorer.h Loading commit data...
rst-malloc.h Loading commit data...
rst_info.h Loading commit data...
security.h Loading commit data...
servicefd.h Loading commit data...
setproctitle.h Loading commit data...
shmem.h Loading commit data...
sigframe.h Loading commit data...
signalfd.h Loading commit data...
sk-inet.h Loading commit data...
sk-packet.h Loading commit data...
sk-queue.h Loading commit data...
sockets.h Loading commit data...
stats.h Loading commit data...
string.h Loading commit data...
syscall-types.h Loading commit data...
sysctl.h Loading commit data...
sysfs_parse.h Loading commit data...
timerfd.h Loading commit data...
tty.h Loading commit data...
tun.h Loading commit data...
unix_diag.h Loading commit data...
util-pie.h Loading commit data...
util.h Loading commit data...
uts_ns.h Loading commit data...
vdso.h Loading commit data...
vma.h Loading commit data...
xmalloc.h Loading commit data...