首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SSL_read读取1400字节后SSL_pending会返回0?

为什么SSL_read读取1400字节后SSL_pending会返回0?
EN

Stack Overflow用户
提问于 2011-09-04 01:59:21
回答 1查看 2.2K关注 0票数 1
代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-04 02:31:16

我不是ssl专家,但这可能是因为没有什么可读的。您正在读取和移动一个缓冲区(最多需要几毫秒),然后在该时刻没有更多可读的情况下终止。同时,您要处理的是较低层的网络速度和解密速度要慢得多。在那个时刻没有任何东西可以返回,这一点也不是不可能的。

为什么要把那张支票放在那里?如果您尝试多路复用或其他什么方式,那么打开套接字作为非阻塞的方式不也是可行的吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7294870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档