Skip to content

Commit

Permalink
net/tcp: Fix TCP keepalive time unit misuse problem
Browse files Browse the repository at this point in the history
Summary:
  The conn->keeptimer units is decisecond,but its unit is treated as
half-second in the tcp_timer & tcp_get_timeout function.
  Therefore conn>keeptimer needs to be divided by 5(DSEC_PER_HSEC)
to match half-second units.

Signed-off-by: zhangshuai39 <[email protected]>
  • Loading branch information
zs39 committed Sep 25, 2024
1 parent 8288fe4 commit cb081e2
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions net/tcp/tcp_timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,15 @@ static int tcp_get_timeout(FAR struct tcp_conn_s *conn)
#ifdef CONFIG_NET_TCP_KEEPALIVE
if (timeout == 0)
{
timeout = conn->keeptimer;
/* The conn->keeptimer units is decisecond and the timeout
* units is half-seconds, therefore they need to be unified.
*/

timeout = conn->keeptimer / DSEC_PER_HSEC;
}
else if (conn->keeptimer > 0 && timeout > conn->keeptimer)
else if (conn->keeptimer > 0 && timeout > conn->keeptimer / DSEC_PER_HSEC)
{
timeout = conn->keeptimer;
timeout = conn->keeptimer / DSEC_PER_HSEC;
}
#endif

Expand Down Expand Up @@ -699,11 +703,11 @@ void tcp_timer(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn)
* received from the remote peer?
*/

if (conn->keeptimer > hsec)
if (conn->keeptimer > hsec * DSEC_PER_HSEC)
{
/* Will not yet decrement to zero */

conn->keeptimer -= hsec;
conn->keeptimer -= hsec * DSEC_PER_HSEC;
}
else
{
Expand Down

0 comments on commit cb081e2

Please sign in to comment.