TCP socket timeout after IP address is removed
Subsystems (2)
Hi,
We have a timout problem on TCP sockets, which probably has some trivial solution, but I couldn't figure it out after hours of staring at the code, so hopefully someone can shed some light on it here. The scenario is the following:
- I start an ssh connection from host A to B, it works fine
- netstat shows the socket is using local address K
- then I remove local address K, and with DHCP I get a new one, L on a different interface (interfaces are always up during the whole time)
- the socket is still alive, but my SSH connection doesn't transmit anything, obviously, as netstat says it is still using IP address K
- ftrace showed me the data goes through the TCP layer and finally the IP layer drops it because the route is no longer valid
On 3.10 kernel it times out after ~15 minutes or so, which isn't too good for me. On 2.6.32 it times out after a couple of minutes, and I would like to achieve the same, but I couldn't figure out how. Could anyone give me some guidance?
Regards,
Zoltan Kiss
Quoted 15 lines · Zoltan Kiss
Hi,
We have a timout problem on TCP sockets, which probably has some trivial solution, but I couldn't figure it out after hours of staring at the code, so hopefully someone can shed some light on it here.
The scenario is the following:
- I start an ssh connection from host A to B, it works fine
- netstat shows the socket is using local address K
- then I remove local address K, and with DHCP I get a new one, L on a different interface (interfaces are always up during the whole time)
- the socket is still alive, but my SSH connection doesn't transmit anything, obviously, as netstat says it is still using IP address K
- ftrace showed me the data goes through the TCP layer and finally the IP layer drops it because the route is no longer valid
Quoted 4 lines
On 3.10 kernel it times out after ~15 minutes or so, which isn't too good for me. On 2.6.32 it times out after a couple of minutes, and I would like to achieve the same, but I couldn't figure out how. Could anyone give me some guidance?
Depending on your scenario, you can either try tweaking the sysctl net.ipv4.tcp_retries2 or use setsockopt TCP_USER_TIMEOUT
man tcp or see http://patchwork.ozlabs.org/patch/62889/
Quoted 8 lines
Regards,
Zoltan Kiss
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 21 lines · Yuchung Cheng
Quoted 15 lines · Zoltan Kiss
Hi,
We have a timout problem on TCP sockets, which probably has some trivial solution, but I couldn't figure it out after hours of staring at the code, so hopefully someone can shed some light on it here.
The scenario is the following:
- I start an ssh connection from host A to B, it works fine
- netstat shows the socket is using local address K
- then I remove local address K, and with DHCP I get a new one, L on a different interface (interfaces are always up during the whole time)
- the socket is still alive, but my SSH connection doesn't transmit anything, obviously, as netstat says it is still using IP address K
- ftrace showed me the data goes through the TCP layer and finally the IP layer drops it because the route is no longer validQuoted 4 lines
On 3.10 kernel it times out after ~15 minutes or so, which isn't too good for me. On 2.6.32 it times out after a couple of minutes, and I would like to achieve the same, but I couldn't figure out how. Could anyone give me some guidance?
Quoted 5 lines
Depending on your scenario, you can either try tweaking the sysctl net.ipv4.tcp_retries2 or use setsockopt
TCP_USER_TIMEOUTman tcp or see http://patchwork.ozlabs.org/patch/62889/
Besides that the cached dst by that socket should be obsolete as well, since the old routing entry might not be valid any more. I mention this because routing cache was removed between 2.6.32 and 3.10.