• David S. Miller's avatar
    [TCP]: Process linger2 timeout consistently. · 52499afe
    David S. Miller authored
    Based upon guidance from Alexey Kuznetsov.
    
    When linger2 is active, we check to see if the fin_wait2
    timeout is longer than the timewait.  If it is, we schedule
    the keepalive timer for the difference between the timewait
    timeout and the fin_wait2 timeout.
    
    When this orphan socket is seen by tcp_keepalive_timer()
    it will try to transform this fin_wait2 socket into a
    fin_wait2 mini-socket, again if linger2 is active.
    
    Not all paths were setting this initial keepalive timer correctly.
    The tcp input path was doing it correctly, but tcp_close() wasn't,
    potentially making the socket linger longer than it really needs to.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    52499afe
tcp.c 62.9 KB