嵌入式系统上的多个忽略的未知记录和OpenSSL性能

时间:2017-04-21 14:42:18

标签: performance ssl openssl load

我正在开发的程序是嵌入式系统上的视频服务器。

我用于测试的玩家是ffplay。每次请求视频片段时,都会创建一个新的套接字,因此会执行握手。

我使用自生成的证书。 1024位密钥。

我的问题是:在每个片段之间,播放器会冻结几毫秒到1秒。

我知道它发生在数据发送结束和握手解码之间。

1)这是我的函数模拟sendfile函数。这有什么问题吗?

ssize_t ssl_sendfile(int fd, SSL* ssl, off_t* offset, size_t nbytes)
{
    size_t totalSent = 0;
    int numRead = 0, numSent = 0;

    char * buf = mem_malloc(nbytes);

    while(nbytes > 0) {     
        numRead = pread(fd, buf, nbytes, *offset);

        if(numRead == 0) {
            break;
        }
        if(numRead == -1) {
            mem_free(buf);
            return 0;
        }

        while((numSent = SSL_write(ssl, buf, numRead)) <= 0) {
            int error = SSL_get_error(ssl, numSent);
            switch(error) {
                case SSL_ERROR_WANT_READ:
                case SSL_ERROR_WANT_WRITE:
                    continue;
                case SSL_ERROR_NONE:
                    break;
                default:
                    if(strcmp(strerror(errno), "Success") != 0) {
                        log_notice("Error on socket on SSL_write");
                        totalSent = 0;
                        goto free;
                    }
            }
        }

        *offset += numSent;
        nbytes -= numSent;
        totalSent += numSent;
    }

    free:
    mem_free(buf);

    return totalSent;
}

2)在Wireshark中,我有&#34;忽略未知记录&#34;从第二个到最后一个ssl块。是否意味着数据发送方式不好或只是解码失败?

3)在Wireshark中,应用程序数据/忽略未知记录的长度最大为1514.为什么不是16KB? 4)考虑另一个较轻的库而不是OpenSSL?

谢谢

0 个答案:

没有答案