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.

[参考译文] CC3200:CC3200 https 握手故障原因

Guru**** 2553260 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/608776/cc3200-cc3200-https-handshakes-failure-causes

器件型号:CC3200

在可能的应用程序中、当 HTTPS 故障 是由于安全问题(例如、CA 文件无效或 CA 过期)时、我将关闭 HTTPS 连接并启动与云的 HTTP 连接(云支持 HTTP 和 HTTPS)。 因此,我需要知道 HTTPS 握手失败是由于上面提到的安全问题或其他原因(例如 网络卡塞或服务器忙 )造成的。 如果 HTTPS 握手失败与安全问题无关,我的应用程序将继续在 HTTPS 中重试。 请告诉我如何区分 HTTPS 握手失败原因。 是否可以只检查 HTTPCLI_CONNECT ()的返回代码。 如果可能、请提供故障码列表、并告诉我哪些故障码与安全问题相关。

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

    尊敬的 Lin:

    遗憾的是,默认情况下,无论底层套接字错误是什么,HTTPCLI_CONNECTFAIL 都会返回通用的 HTTP2Cli_ECONNECTFAIL。

    您可以修改 HTTPCLI_CONNECT()以返回更有用的错误代码。 在 HTTPCL_CONNECT()中,有一个部分检查来自 connect()的返回代码,如果出现错误则返回 HTTPCli_ECONNECTFAIL:

    RET =连接(skt、sa、slen);
    if (ret < 0){
    #ifdef _slp__
    if (errno (skt)=EINPROGRESS){
    setClState (CLI、INPROGRESS_FLAG、1);
    
    返回(HTTPCli_EINPROGRESS);
    }
    #endif /*__SLP__*/
    HTTPCLI_DISCONNECT (CLI);
    
    返回(HTTPCli_ECONNECTFAIL);
    } 

    相反,您只需返回更有用的 connect()错误代码,如下所示:

    RET =连接(skt、sa、slen);
    if (ret < 0){
    #ifdef _slp__
    if (errno (skt)=EINPROGRESS){
    setClState (CLI、INPROGRESS_FLAG、1);
    
    返回(HTTPCli_EINPROGRESS);
    }
    #endif /*__SLP__*/
    HTTPCLI_DISCONNECT (CLI);
    
    返回(RET);
    } 

    可以在 位于 cc3200-sdk\simplelink\include\的 socket.h 源文件中找到可从 connect()获取的可能错误列表

    此致、

    Michael