小编Amd*_*dei的帖子

boost :: asio和async SSL stream:如何检测数据/连接结束?

我正在尝试制作asio和SSL的朋友.一切顺利,但有一件事会造成不便:如何检测对等关闭连接,并将其与同行只是在发送数据中短暂休息时的情况区分开来,目的是在几秒钟之后继续它?

  • 提升1.48
  • OpenSSL 1.0.0e
  • 使用VS10编译为32位代码
  • 使用W7 x64.

我的困惑来自这样一个事实,即普通套接字和SSL流的asio行为是不同的.如果我使用tcp :: socket - 我在对等关闭连接时收到EOF错误.但对于boost :: asio :: ssl :: stream - 事实并非如此.相反,async_read_some在传输字节时返回0,如果我尝试继续从SSL流中读取 - 返回short_error(http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/ streams.html).

所以,问题是:它是预期的行为,还是我错误配置了什么?

客户端代码段:

class client
{
public:

    // bla-bla-bla-bla-bla ....
    //
   void handle_write(const boost::system::error_code& error)
   {
       if (!error)
       {
           socket_.async_read_some(boost::asio::buffer(reply_, max_length),
               boost::bind(&client::handle_read, this,
               boost::asio::placeholders::error,
               boost::asio::placeholders::bytes_transferred));
       }
       else
       {
           std::cout << "Write failed: " << error.message() << "\n";
       }
   }

   void handle_read(const boost::system::error_code& error,
                   size_t bytes_transferred)
   {

       std::cout << "Bytes transfered: " << bytes_transferred << "\n";
       if …
Run Code Online (Sandbox Code Playgroud)

ssl boost-asio

16
推荐指数
2
解决办法
8331
查看次数

标签 统计

boost-asio ×1

ssl ×1