考虑这段代码:
const std::size_t rawBufferSize = 1024;
char rawBuffer[rawBufferSize] = { 0 };
boost::asio::ssl::stream< boost::asio::ip::tcp::socket >* sslStream;
... // initializing stuff
boost::system::error_code ec;
auto buffer = boost::asio::buffer(rawBuffer, rawBufferSize);
for(; ; )
{
int readBytes = sslStream->read_some(buffer, ec); // I know that read_some return std::size_t (unsigned int)...
// here, readBytes equals -1
if (ec)
break;
... (1)
}
“readBytes”如何等于-1并且达到“(1)”行怎么可能.
我有什么不对的任何线索?
最佳答案 在您的情况下,您的error_code变量不是指针,因此以下if语句
if (ec)
break;
如果error_code确实存在,则不会正确检查.
您需要这样做以检查error_code是否存在:
if (ec.value() != 0) break;
现在,当发生错误时,它将正确中断.
在枚举内,error_code的值可以是these错误条件中的任何一个.