gpt4 book ai didi

c++ - 为什么SSL_read读取1400字节后SSL_pending返回0?

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:55 25 4
gpt4 key购买 nike

while(1)
{
read_blocked_on_write=0;

const int buff_len = 1024;
char buff[buff_len];

iResult = SSL_read(ssl, buff, buff_len);

int ssl_err = SSL_get_error(ssl, iResult);
if(ssl_err == SSL_ERROR_NONE)
{
if(offset + iResult > recvbuflen - 1)
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
MessageBox(hwnd, TEXT("ERROR"), TEXT("Not enough memory!"), MB_OK | MB_ICONERROR);
return 1;
}
memcpy(recvbuf + offset, buff, iResult);
offset += iResult;
if(SSL_pending(ssl))
{
continue;
}
else
{
bFinish = true;
break;
}
}
else if(ssl_err == SSL_ERROR_ZERO_RETURN)
{
bFinish = true;
break;
}
else if(ssl_err == SSL_ERROR_WANT_READ)
{
break;
}
else if(ssl_err == SSL_ERROR_WANT_WRITE)
{
/* We get a WANT_WRITE if we're
trying to rehandshake and we block on
a write during that rehandshake.

We need to wait on the socket to be
writeable but reinitiate the read
when it is */
read_blocked_on_write=1;
break;
}
else
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
MessageBox(hwnd, TEXT("ERROR"), TEXT("SSL problem!"), MB_OK | MB_ICONERROR);
return 1;
}
}

最佳答案

我不是 ssl 专家,但这可能是因为没有什么可读的。您正在读取和移动缓冲区(最多需要几毫秒),然后如果在那一刻没有更多内容可读则终止。同时,您正在处理低得多的网络速度和较低层的解密。在那一刻没有任何东西可以归还并非不可能。

为什么要在那里进行检查?如果您尝试多路复用或其他方式,是否可以选择以非阻塞方式打开套接字?

关于c++ - 为什么SSL_read读取1400字节后SSL_pending返回0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com