This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:错误! 代码=-106、desc = httpTask:地址解析失败

Guru**** 2549110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1034653/tm4c1294ncpdt-error-code--106-desc-httptask-address-resolution-failed

器件型号:TM4C1294NCPDT

您好!

我有一个基于 TI_RTOS 的项目、在这个项目中、我每分钟向服务器发布一个数据、我的代码有时在 HTTPCli_initSockAddr 函数处随机失败、我得到这个错误

错误! 代码=-106、desc = httpTask:地址解析失败

有时它运行正常、并随机获取该误差。 每次它是相同的误差。 在该函数下、它是否有特定的原因发生故障?

是否有需要更改的内容? 因为在我的电路板重新启动后、它再次正常连接、没有任何问题、运行了几分钟、并再次执行同样的操作。

我还注意到、这肯定会在每小时5分钟后发生。

此致、

Deepak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我不是 NDK 领域的专家、但我找到了以下信息。  

     错误代码=-106表示无法解析主机名。 请参阅 C:\ti_tirtos_tivac_2_16_00_08\products\ns_1_11_00_10\packages/ti\net\http\httpcli.h 文件。  

     下面是 httpcli.c 文件中 HTTPCLI_initSockAddr ()的代码片段。 如果主机名长度 dlen 大于等于64的 domain_BUFLEN,则返回-106。 我想您要检查您是否拥有长主机地址。  

    int HTTPCli_initSockAddr(struct sockaddr *addr, const char *uri, int flags)
    {
        char luri[DOMAIN_BUFLEN];
        char *domain;
        char *delim;
        int dlen;
        int port = HTTPStd_PORT;
        xassert(addr != NULL);
        xassert(uri != NULL);
    
        domain = (char *)uri;
    
        if (strncasecmp(HTTP_PREFIX, domain, (sizeof(HTTP_PREFIX) - 1))
                == 0) {
            port = HTTPStd_PORT;
            domain = domain + sizeof(HTTP_PREFIX) - 1;
        }
        else if (strncasecmp(HTTPS_PREFIX, domain, (sizeof(HTTPS_PREFIX) - 1))
                == 0) {
            port = HTTPStd_SECURE_PORT;
            domain = domain + sizeof(HTTPS_PREFIX) - 1;
        }
    
        delim = strchr(domain, ':');
        if (delim != NULL) {
            dlen = delim - domain;
            port = strtoul((delim + 1), NULL, 10);
        }
        else {
            delim = strchr(domain, '/');
            if (delim != NULL) {
                dlen = delim - domain;
            }
            else {
                dlen = strlen(domain);
            }
        }
    
        if (dlen >= DOMAIN_BUFLEN) {
            return (HTTPCli_EURILENLONG);
        }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢您的回复。 实际上、您所讨论的错误是 HTTPCLI_EURILENLONG、其值为-122、我将得到-106、我还验证了我的主机名长度为45 char。

    我收到来自上述同一函数中这段代码的主机分辨率错误

    RET = getaddrinfo (域、"0"、&hinds、&Addr);
    如果(ret!= 0){
    返回(HTTPCli_%HOSTNAME%);

    此函数在文件...\tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\NDK\nettools\inet\InetAddr.c 中定义

    正如我说过的、有时它可以正常工作数小时、没有任何问题、然后突然失败、再次复位时它可以正常工作。

    我也无法使用调试器进行调试。 不确定原因。

    此致、

    Deepak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、您好!

     你是对的。  HTTPCli_HOSTNAME 错误代码  -122。 我实际上不知道问题的原因。 您是否有 Wireshark 捕获来协助调试?

    [引用 userid="369220" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1034653/tm4c1294ncpdt-error-code--106-desc-httptask-address-resolution-failed/3825253 #38252525253"]

    我也无法使用调试器进行调试。 不确定原因。

    [/报价]

    我建议您将  InetAddr.c 复制到您的项目目录并重新生成它。 我想您将能够以这种方式调试文件。 它是 TI-RTOS NDK 库的一部分。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Charles、

    我能够找出一个问题、即我的设备从 NTP 服务器获取了不必要的数据包、并将设备置于奇怪的状态。

    现在、我遇到另一个问题、在收到此错误之前、我将收到 00660.587 getaddrinfo:错误:无法解析主机名

    奇怪的是、我可以使用网络 TAP 看到没有数据、也没有来自设备的与 DNS 相关的请求。

    我的器件运行正常、因为我可以看到从器件接收和发送了 DHCP 数据包。

    NDK 中的 getaddrinfo 函数中是否存在错误? 由于看门狗重新启动电路板后、它连接良好、我可以看到它连接良好。

    我使用的是 NDK 2.25.0.9

    此致、

    Deepak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、您好!

    [引用 userid="369220" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1034653/tm4c1294ncpdt-error-code--106-desc-httptask-address-resolution-failed/3834656 #3834656]NDK 中的 getaddrinfo 函数是否存在错误? 由于看门狗重新启动电路板后、它连接良好、我可以看到它连接良好。

    请参阅下面的 NDK 下载页面、其中显示 找到了 getaddrinfo API 中的错误、但已在 NDK 2.24.02.31版本中修复。 对于 NDK 2.25.0.9、也可以修复相同的错误。 当然、我不知道您是否观察到不同类型的错误。  

    https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ndk/index.html 

    另请参见重要说明 TI-NDK 处于长期维护模式。  

    https://www.ti.com/tool/NDKTCPIP

    我看到下面的这个线程你开了一会。 不确定这是否与您的当前观察结果有关。 请检查该主题中 Dalton 的响应。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/836775/ti-rtos-mcu-getaddrinfo-error-couldn-t-alloc-dns-buffer?tisearch=e2e-sitesearch&keymatch=getaddrinfo%253A%2520Error%253A%2520couldn%2527t%2520resolve%2520host%2520name#

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我仍然无法解决出现  此错误的原因:无法解析主机名。 是否有 NDK 团队的某个人可以与他联系以解决此问题?

    除了此错误语句之外、我不再获得其他信息。

    您提到的帖子是不同的错误类型、与此错误类型不同。

    此致、

    Deepak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、您好!

     遗憾 的是、正如我在之前的回复中提到的、NDK 处于长期维护模式、不再有专门的 NDK 团队。 所有 TI-RTOS 和 NDK 问题均由 MCU 团队提供支持。 但是、我对 NDK 没有很深的了解。 真的很抱歉。

    我不知道此帖子是否会以任何方式提供帮助。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1004107/tm4c1290ncpdt-bug-in-tirtos_tivac_2_16_01_14---ns_1_11_00_10?tisearch=e2e-sitesearch&keymatch=getaddrinfo%20bug#

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、您好!

     遗憾 的是、正如我在之前的回复中提到的、NDK 处于长期维护模式、不再有专门的 NDK 团队。 所有 TI-RTOS 和 NDK 问题均由 MCU 团队提供支持。 但是、我对 NDK 没有很深的了解。 真的很抱歉。

    我不知道此帖子是否会以任何方式提供帮助。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1004107/tm4c1290ncpdt-bug-in-tirtos_tivac_2_16_01_14---ns_1_11_00_10?tisearch=e2e-sitesearch&keymatch=getaddrinfo%20bug#

    还有一个问题、您能否在不同的电路板和不同的网络上重复出现相同的问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我对多个电路板和多个网络进行了一些基于时间的测试、我可以看到相同的结果。 奇怪的是、当电路板重新启动时、一切工作正常、而不会改变网络端的任何东西

    您能否提出任何可能帮助我比调试器更好地解码这一点的想法? 我尝试将文件添加到我的工程中、但由于链接器和编译器相关的错误、我无法编译该文件。 发生这种情况时、是否有方法可以使用调试器来查看该函数的值?  

    此致、

    Deepak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="369290" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1034653/tm4c1294ncpdt-error-code--106-desc-httptask-address-resolution-failed/3861526 #3861526">我对多个电路板和多个网络进行了一些基于时间的测试、我可以看到相同的结果。 奇怪的是、当电路板重新启动时、一切工作正常、而不会改变网络端的任何东西。

    Deepak、您好!

     很抱歉,我希望能提供更多的指导。 但我对 NDK 的了解非常有限、我不知道该怎么建议。  

    [引用 userid="369290" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1034653/tm4c1294ncpdt-error-code--106-desc-httptask-address-resolution-failed/3861526 #3861526")您能提出任何可能帮助我比调试器更好地解码此内容的想法吗? 我尝试将文件添加到我的项目中、但无法编译它

     在将  tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\NDK\nettools\inet\InetAddr.c 文件复制到当前项目目录后、编译不会出现问题。 请确保已设置包含路径。