asio程序退出befor完成async_write

asio程序退出befor完成async_write

问题描述:

我正在做一些测试与升压阿西奥,我不明白为什么处理器的async_write函数(女巫是lambda函数)不会被调用。asio程序退出befor完成async_write

#include <iostream> 
#include <boost/asio.hpp> 
using namespace boost::asio; 

int main() { 
    io_service service; 
    std::string str = std::string("HTTP/1.1 200 OK\r\n ......"); 

    ip::tcp::acceptor my_acceptor{ service, ip::tcp::endpoint(ip::tcp::v4(), 6767) }; 
    ip::tcp::socket my_socket{ service }; 
    my_acceptor.async_accept(my_socket, [&my_socket, str](boost::system::error_code) { 
     std::cout << "connected " << std::endl; 

     async_write(my_socket, boost::asio::buffer(str), [&my_socket](boost::system::error_code, std::size_t) { 
      std::cout << "Data written" << std::endl; 

     }); 

    }); 

    service.run(); 
} 

“数据写”永远不会出现,消息不发送到客户端 什么是错的代码?

+0

格式化和避免无用的手动内存管理是您的第一道防线 – sehe

该代码运行良好。

你是否有足够的权限在端口80上侦听?

你确定没有其他人在那里听吗?

尝试

  • 不同的端口(的说,代替6767 80)
  • 上运行的打印的ec

例如消息

#include <iostream> 
#include <boost/asio.hpp> 
using namespace boost::asio; 

int main() { 
    io_service service; 
    std::string str = std::string("HTTP/1.1 200 OK\r\n ......"); 

    ip::tcp::acceptor my_acceptor{ service, ip::tcp::endpoint(ip::tcp::v4(), 6767) }; 
    ip::tcp::socket my_socket{ service }; 
    my_acceptor.async_accept(my_socket, [&my_socket, &str](boost::system::error_code ec) { 
     if (ec) { 
      std::cerr << "Oops: " << ec.message() << "\n"; 
     } else { 
      std::cout << "connected " << std::endl; 

      async_write(my_socket, boost::asio::buffer(str), [&my_socket](boost::system::error_code ec, std::size_t) { 
       if (ec) { 
        std::cerr << "Oops: " << ec.message() << "\n"; 
       } else { 
        std::cout << "Data written" << std::endl; 
       } 
      }); 
     } 
    }); 

    service.run(); 
}