小编ikk*_*kku的帖子

boost :: asio中的未经请求的消息崩溃应用程序,没有SSL它工作正常,为什么?

我想通过SSL连接发送未经请求的消息.这意味着服务器不是基于来自客户端的请求发送消息,而是因为发生了客户端需要知道的某些事件.

我只是使用来自boost站点的SSL服务器示例,添加了一个在10秒后发送'hello'的计时器,在计时器到期之前一切正常(服务器echo的所有内容),'hello'也被收到,但之后应用程序在下次将文本发送到服务器时崩溃.

对我来说更奇怪的是,当我禁用SSL代码时,所以使用普通套接字并使用telnet执行相同操作,它可以正常工作并继续正常工作!

我现在第二次遇到这个问题了,我真的不知道为什么会发生这种情况.

以下是我为证明问题而改变的总来源.编译它没有SSL定义并使用telnet,一切正常,定义SSL并使用openssl,或来自boost网站的客户端SSL示例,事情崩溃.

#include <cstdlib>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>

//#define SSL

typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket;

class session
{
public:
  session(boost::asio::io_service& io_service,
      boost::asio::ssl::context& context)
#ifdef SSL  
    : socket_(io_service, context)
#else
    : socket_(io_service)

#endif    
  {
  }

  ssl_socket::lowest_layer_type& socket()
  {
    return socket_.lowest_layer();
  }

  void start()
  {
#ifdef SSL      
    socket_.async_handshake(boost::asio::ssl::stream_base::server,
        boost::bind(&session::handle_handshake, this,
          boost::asio::placeholders::error));
#else
      socket_.async_read_some(boost::asio::buffer(data_, max_length),
          boost::bind(&session::handle_read, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));

      boost::shared_ptr< boost::asio::deadline_timer > timer(new     boost::asio::deadline_timer( socket_.get_io_service() ));
      timer->expires_from_now( boost::posix_time::seconds( 10 ) );
      timer->async_wait( boost::bind( &session::SayHello, this, _1, timer ) …
Run Code Online (Sandbox Code Playgroud)

c++ ssl boost openssl boost-asio

4
推荐指数
1
解决办法
1860
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

openssl ×1

ssl ×1