繁体   English   中英

提升async_read

[英]Boost async_read

我正在尝试创建一个TCP服务器,其中Start()方法阻塞,直到接受连接,然后开始一系列异步读取。 我有以下代码,当我使用telnet连接时,我得到这个输出:

等待新的连接

接受连接

终止调用抛出异常陷阱陷阱:6

这是代码:

void SocketReadThread::Start()
{
    bzero(m_headerBuffer, HEADER_LEN);
    m_running = true;

    asio::io_service ios;
    asio::ip::tcp::acceptor acp (ios,
        boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), GUI_PORT));

    asio::ip::tcp::socket sock(ios);
    std::cout << "Waiting for a new connection" << std::endl;

    acp.accept(sock); 
    std::cout << "Connection accepted" << std::endl;

    asio::async_read(sock, asio::buffer(m_headerBuffer, HEADER_LEN),
        boost::bind(&SocketReadThread::handleReadHeader, shared_from_this(),
        asio::placeholders::error));

    ios.run();
}

void SocketReadThread::handleReadHeader(const system::error_code& error)
{
    std::cout << "Read two bytes!" << std::endl;
}

你应该将你的main()函数包装在try {...} catch (std::exception& e) { cout << e.what(); } try {...} catch (std::exception& e) { cout << e.what(); }块。

您可能通过错误地声明您的ReadHandler在堆栈上做一些令人恐惧(和令人敬畏的事情)。 即使您忽略某些参数,签名也必须是:

void handler (
  const boost::system::error_code& error, // Result of operation.

  std::size_t bytes_transferred           // Number of bytes copied into the
                                          // buffers. If an error occurred,
                                          // this will be the  number of
                                          // bytes successfully transferred
                                          // prior to the error.
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM