为什么在使用 mbedTLS yotta 2.3.2 进行安全套接字后套接字接收数据会出现延迟?

问题描述

我在使用套接字安全性 (mbedTLS yotta 2.3.2) 时遇到数据接收延迟。

场景

-> 我使用 mbedTLS 添加套接字安全性。

-> 当从云端发送 5kb 的有效负载时,我通过设备上的套接字以 2k、2k 和 1k 的 3 个块(预期)接收数据。 “select”套接调用用于套接字处的数据轮询。

-> select 调用在我的代码中实现如下。

API() {
    fd_set read_fds,write_fds,except_fds;
    int channel_fd = 0;
    timeval stSelect;
    stSelect.tv_sec = 0;
    stSelect.tv_usec = 100000;
    
    FD_ZERO(&read_fds);
    FD_ZERO(&write_fds);
    FD_ZERO(&except_fds);
            if (channel_is_ready(&client->channel,FD_READ))
        FD_SET(channel_fd,&read_fds);
    
    if (channel_is_ready(&client->channel,FD_WRITE))
        FD_SET(channel_fd,&write_fds);
        
    int poll_result = select(channel_fd + 1,&read_fds,&write_fds,NULL,&stSelect);
    if (poll_result == 0) {
       check_if_alive();
    } else if (poll_result > 0) {
        if (channel_fd >= 0) {
            if (FD_ISSET(channel_fd,&read_fds)) {
                // read 2kb at once
            }
            if (FD_ISSET(channel_fd,&write_fds)) {
               // do something...
            }
        }
        FD_CLR(0,&read_fds);
        FD_CLR(0,&write_fds);
        FD_CLR(0,&except_fds); 
}

问题

  • 在第 1(2kb) 块和第 2(2kb) 块之间有大约 50 秒到 2 分钟的延迟,这是完全出乎意料的。在套接字上没有延迟(预期)接收到第 2 个(2kb)和第 3 个(1kb)块。
  • 没有套接字安全(mbedTLS),数据接收工作得很好,即接收时没有延迟 套接字中的数据块。
  • 我已经在 GSM、以太网和 WiFi 接口中测试并遇到了同样的问题。

可能是什么原因?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)