[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