【问题标题】:asio program exit befor completing async_writeasio 程序在完成 async_write 之前退出
【发布时间】:2015-07-12 15:19:11
【问题描述】:

我正在使用 boost Asio 进行一些测试,但我不明白为什么 async_write 函数(witch 是 lambda 函数)的处理程序没有被调用。

#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();
}

“写入的数据”永远不会出现,并且消息不会发送到客户端 这段代码有什么问题?

【问题讨论】:

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

标签: c++11 boost-asio


【解决方案1】:

代码对我来说运行良好。

您是否以足够的权限运行以侦听端口 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多