我尝试做一个简单的套接字服务器,使用boost服务器处理多个客户端。但是我遇到了一个问题,async_accept函数的处理程序没有调用我指定的处理程序。这可能是一个简单的修复方法,但我还不太习惯Boost框架。
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include <iostream>
using namespace boost::asio;
using ip::tcp;
using std::cout;
using std::endl;
using std::string;
void accept_handler(const boost::system::error_code& error) {
if (!error) {
std::cout << "Success";
} else {
std::cout << "Failed";
}
}
void server(int port) {
boost::asio::io_service io_service;
// listen for new connection
tcp::acceptor acceptor_(io_service, tcp::endpoint(tcp::v4(), port));
std::cout << "Listening for Connection\n";
// socket creation
tcp::socket socket_(io_service);
// waiting for the connection
std::cout << "Waiting for Clients\n";
acceptor_.async_accept(socket_, accept_handler);
}
我尝试的事情是查看boost框架的文档,其中说
此函数用于要求io_service执行给定的处理程序,但不允许io_service从此函数内部调用处理程序。
总而言之,async_accept函数会自动调用处理程序。所以我想弄清楚如何自动调用这个函数。
1条答案
按热度按时间q3qa4bjr1#
你有一个异步操作,但没有运行你的io服务。最简单的解决方法是立即添加它:
请记住,除非
accept_handler
发布更多的异步工作,否则服务将完成,您需要restart
来执行新的工作。