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();
}
“数据写”永远不会出现,消息不发送到客户端 什么是错的代码?
答
该代码运行良好。
你是否有足够的权限在端口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();
}
格式化和避免无用的手动内存管理是您的第一道防线 – sehe