c – 提升asio&ssl和错误代码

考虑这段代码:

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错误条件中的任何一个.

点赞