[CRIU] [PATCH] Do not call listen() when SO_REUSEADDR is off
Pavel Emelyanov
xemul at parallels.com
Mon Feb 16 02:18:52 PST 2015
On 02/14/2015 03:26 AM, Saied Kazemi wrote:
> 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 at google.com> for debugging.
>
> Signed-off-by: Saied Kazemi <saied at google.com>
Applied, thanks!
More information about the CRIU
mailing list