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
Signed-off-by: zhangshuai39 <[email protected]>
  • Loading branch information
zs39 committed Sep 24, 2024
1 parent 8288fe4 commit daf75a8
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 daf75a8

Please sign in to comment.