C++ 在使用SSL_read()时,如何知道何时没有进一步的响应可从服务器接收
我不熟悉套接字编程 下面的代码片段用于从服务器获取大约100万行的响应。我不知道响应的确切长度,因此检查响应串是否由OK、NO、SUCCESS、FAILURE等结尾词组成C++ 在使用SSL_read()时,如何知道何时没有进一步的响应可从服务器接收,c++,sockets,visual-c++,C++,Sockets,Visual C++,我不熟悉套接字编程 下面的代码片段用于从服务器获取大约100万行的响应。我不知道响应的确切长度,因此检查响应串是否由OK、NO、SUCCESS、FAILURE等结尾词组成 size = 8192; while(1) { readBytes = SSL_read(SSL, buff, size); buff[readBytes] = 0; if (readBytes <= 0) { int errorno = SSL_get_error(SSL,
size = 8192;
while(1)
{
readBytes = SSL_read(SSL, buff, size);
buff[readBytes] = 0;
if (readBytes <= 0) {
int errorno = SSL_get_error(SSL, readBytes);
throw ZIMAPEXPBadSSL(GetSSLError("SSL read failed", errorno, ERR_get_error()));
}
else {
rsp += buff;
if(checking_Here_If_The_Response_Is_Complete(buff))
break;
}
}
size=8192;
而(1)
{
readBytes=SSL\u read(SSL,buff,size);
buff[readBytes]=0;
如果(readBytes问题与SSL无关,而是与应用程序协议有关。它不仅适用于SSL\u read
,而且也适用于正常的read
。使用select
或类似方法在这里没有帮助
根据您的描述,应用程序协议由一系列消息组成,其中消息的大小各不相同,并且事先不知道长度。在这种情况下,除了读取一些数据并检查消息是否已完成之外,没有其他方法。如果相反,则事先知道消息的长度(例如,在每条消息前加上固定大小的长度值)然后您可以只读取已知的字节数,而不需要进行复杂的检查。该问题与SSL无关,而是与应用程序协议有关。它不仅适用于SSL\u read
,而且也适用于正常的read
。使用select
或类似方法在这里没有帮助
根据您的描述,应用程序协议由一系列消息组成,其中消息的大小各不相同,并且事先不知道长度。在这种情况下,除了读取一些数据并检查消息是否已完成之外,没有其他方法。如果相反,则事先知道消息的长度(例如,在每条消息前加上固定大小的长度值)然后您就可以读取已知的字节数,而不需要进行复杂的检查。Thank you@SteffenUllrich。我们遵循了本文中给出的内容:因此认为它可能会起作用。@RamKishore:与普通套接字相比,本页只描述了使用select with SSL套接字的陷阱。它与一般的适配性无关针对您的具体问题使用select的可能性。正如我所说,问题不在于SSL或select,而在于您案例中的应用程序协议设计没有前端长度信息,而是依赖于某个消息结束标记或消息已完全读取的某种其他类型的指示器。感谢您@SteffenUllrich的澄清。 :)谢谢@SteffenUllrich。我们遵循了本文中给出的内容,因此认为它可能会起作用。@RamKishore:与普通套接字相比,本页仅描述了使用select与SSL套接字的陷阱。这与使用select解决特定问题的一般适用性无关。正如我所说,问题不是SSL或select b请注意,您案例中的应用程序协议设计没有前端长度信息,而是依赖于某个消息结束标记或某种其他类型的指示器,表明消息已被完全读取。感谢您的澄清@SteffenUllrich.:)