mirror of
https://github.com/apache/nuttx.git
synced 2026-05-24 16:11:56 +08:00
net/tcp: Fix TCP keepalive time unit misuse problem
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 <zhangshuai39@xiaomi.com>
This commit is contained in:
committed by
Alan C. Assis
parent
efdb4322fc
commit
5e74ed8d34
+9
-5
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user