关于openssl库中SSL_read函数阻塞问题

sinat_30784251 2017-04-14 12:19:03
最近在研究模拟登录问题,在取服务器返回的数据的时候出现SSL_read阻塞,代码如下

while(TRUE)
{
FD_SET fds;
FD_ZERO(&fds);
FD_SET(socketClient, &fds);

char recvData[1000] = {0};
int nRecvLen;


int nErr = SSL_read(ssl, recvData, sizeof(recvData));
if (nErr <= 0)
{
break;
}
int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, recvData, -1, NULL, 0);
WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));

MultiByteToWideChar(CP_UTF8, 0, recvData, -1, pUnicode, unicodeLen);
CString cs(pUnicode);
delete[]pUnicode;
pUnicode = NULL;
//MessageBox(NULL,cs,"",MB_OK);
cstrRecvData += cs;
}

读完数据后会再一次调用SSL_read,按理来说此时nErr应该返回0,可是SSL_read函数并未返回,而是一直阻塞,请问这是什么原因呢?
...全文
2586 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chao1856576 2017-08-07
  • 打赏
  • 举报
回复
同问 怎么设置超时时间的?
格桑123 2017-06-13
  • 打赏
  • 举报
回复
请问怎么设置超时时间的
sinat_30784251 2017-04-15
  • 打赏
  • 举报
回复
问题解决了,可以设置一个超时时间
sinat_30784251 2017-04-14
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
你的socket是否为阻塞模式,这样ssl_read就一直在等待下一个数据的到来。
貌似要阻塞的才行啊,我设为非阻塞后在这句话下断点都不会执行到这来
oyljerry 2017-04-14
  • 打赏
  • 举报
回复
你的socket是否为阻塞模式,这样ssl_read就一直在等待下一个数据的到来。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧