Mon 11 Jun 2007 01:54:39 PM UTC, comment #6:
>I checked with the TCP flags set to 0 with my test and my test works same as to that of ACK flag set.So no objections with the fix.
>If you have the exact section in the RFC1122 that talks about the TCP flags in conjunction with keep alive timer please post it. I could only find about the sequence numbers nothing about flags.
Sorry, except link give in comment #3 (from RFC1122), the only source I have check is linux-2.6.21.4 source code, but even with that, it wasn't very clear. So, I have experiment to see the behavior (last thing to do when documentation isn't available)...
Ok, I check in and close that.
Thank to report that...
|
Mon 11 Jun 2007 01:35:55 PM UTC, comment #4:
I have set in tcp_keepalive a TCPH_FLAGS_SET(tcphdr, 0);
I have test with a pseudo telnet server with lwip with these parameters:
int flag=1;
setsockopt( sock, SOL_SOCKET, SO_KEEPALIVE, (char*)&flag, sizeof(flag));
flag=10;
setsockopt( sock, IPPROTO_TCP, TCP_KEEPIDLE, (char*)&flag, sizeof(flag));
flag=2;
setsockopt( sock, IPPROTO_TCP, TCP_KEEPINTVL, (char*)&flag, sizeof(flag));
flag=10;
setsockopt( sock, IPPROTO_TCP, TCP_KEEPCNT, (char*)&flag, sizeof(flag));
Like this, when my client (the Windows 2000 Telnet client) connect, and wait forever, I see the keepalive exchange. All seems ok, the TCP connection is maintained. But, if I cut the network between lwip and my pc, after 10sec, keepalive exchange become faster, and after 10 retry, the TCP connection is abort:
tcp_slowtmr: KEEPALIVE timeout. Aborting connection to 192.168.1.85.
I attach the network capture file for the first part of the test. Ethereal seems correctly "detect" keepalives packets. In this capture, 192.168.1.246 is my lwIP device (and 192.168.1.85 the PC).
So, if no objects about that, I will check in with 0 in TCP flags for tcp_keepalive...
(file #13012)
|
Mon 04 Jun 2007 08:49:13 PM UTC, original submission:
Hello,
I'm using tcp keep-alive timer in my application. Whilst sending the keep-alive probes occasionally FIN and RST flags were
getting set in the outgoing segment.
In the tcp_keepalive()/tcp_out.c tcp flags field is not set.By setting the ack flag seems to fix the problem.
[ TCPH_FLAGS_SET( tcphdr, TCP_ACK );]
Could anyone confirm this problem and whether the above solution is correct or not?
Thanks,
-Srinivas.
|