2015-07-12 73 views
1

我正在做一些測試與升壓阿西奧,我不明白爲什麼處理器的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

回答

0

該代碼運行良好。

你是否有足夠的權限在端口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(); 
} 
相關問題