硬汉嵌入式论坛

 找回密码
 立即注册
查看: 805|回复: 2
收起左侧

[ThreadX全家桶] ThreadX NetXDUO使用函数nx_tcp_client_socket_connect连接远程服务器超时问题

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2023-3-20 02:19:52 | 显示全部楼层 |阅读模式
使用函数nx_tcp_client_socket_connect(&TCPSocket, TCP_SERVER_ADDRESS, TCP_SERVER_PORT, NX_WAIT_FOREVER)连接远程服务器,远程服务器不存在会返回0x38,局域网方式和板子不在一个网段将返回0x21

虽然设置了NX_WAIT_FOREVER永久等待,但服务器不存在等情况会重试多次后返回,即下面的参数决定:

QQ图片20230320021308.jpg

在nx_port.h文件里面配置为10,将1s后返回
#define  NX_TCP_MAXIMUM_RETRIES 10

QQ截图20230320021752.png



在nx_port.h文件里面配置为100,将10s后返回
#define  NX_TCP_MAXIMUM_RETRIES 100

12.png








回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2023-3-20 09:43:36 | 显示全部楼层
版主,NetX Duo的重传间隔是由NX_TCP_MAXIMUM_RETRIES,NX_TCP_TRANSMIT_TIMER_RATE和NX_TCP_RETRY_SHIFT控制的。默认值是1秒重传一次,不进行指数退避,总共重传10次。因此当服务器不存在时,连接超时是10秒。

ThreadX的默认时钟是1个tick为10ms,很多应用程序会修改成1个tick对应1ms。这个时候NetX Duo也需要做相应的调整,否则整体速率会比预期的快10倍。从你的描述看起来很有可能是ThreadX时钟配置和NetX Duo没匹配上。可以参考下面链接检查一下NX_IP_PERIODIC_RATE的配置
https://github.com/azure-rtos/netxduo/blob/068a9493ecd5af0024005ce695b992c4b172d6aa/ports/linux/gnu/inc/nx_port.h#L75

[C] 纯文本查看 复制代码
#ifndef NX_IP_PERIODIC_RATE
#ifdef TX_TIMER_TICKS_PER_SECOND
#define NX_IP_PERIODIC_RATE         TX_TIMER_TICKS_PER_SECOND
#else
#define NX_IP_PERIODIC_RATE         100
#endif
#endif
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
 楼主| 发表于 2023-3-20 09:59:49 | 显示全部楼层
catro 发表于 2023-3-20 09:43
版主,NetX Duo的重传间隔是由NX_TCP_MAXIMUM_RETRIES,NX_TCP_TRANSMIT_TIMER_RATE和NX_TCP_RETRY_SHIFT控 ...

谢谢,当前其它设置用的默认值,主要是测试下这个宏定义NX_TCP_MAXIMUM_RETRIES
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 21:14 , Processed in 0.176800 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表