我正在开发的程序是嵌入式系统上的视频服务器。
我用于测试的玩家是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?
谢谢