Pet*_*ham 7 c++ boost boost-asio
我有一个boost :: asio的服务器工作正常,除了我正在尝试添加一个检查,没有其他任何接受同一端口上的连接.如果我创建了两个服务器,其中一个始终接受连接,但另一个不报告任何错误(两个中的哪一个接受所有连接似乎是随机的).
服务器类的相关位(它是使用具有Accepted()和typedef的基类的模板,用于创建连接类型):
MessageServer ( boost::asio::io_service &io, unsigned short port_num )
: BaseServerType ( io ), acceptor_ ( io, boost::asio::ip::tcp::endpoint ( boost::asio::ip::tcp::v4(), port_num ) ) {
Listen();
}
void Listen () {
boost::system::error_code ec;
acceptor_.listen ( boost::asio::socket_base::max_connections, ec );
if ( !ec ) {
start_accept();
} else {
// not reached even if a separate process
// is already listening to that port
connection_pointer new_connection;
BaseServerType::Accepted ( new_connection );
}
}
private:
void start_accept() {
connection_pointer new_connection ( CreateConnection ( acceptor_.io_service() ) );
acceptor_.async_accept ( new_connection -> Socket(),
boost::bind ( &MessageServer::handle_accept, this, new_connection,
boost::asio::placeholders::error ) );
}
void handle_accept ( connection_pointer new_connection, const boost::system::error_code &error ) {
if ( !error ) {
BaseServerType::Accepted ( new_connection );
new_connection -> Start();
start_accept();
} else {
// never reached
new_connection.reset();
BaseServerType::Accepted ( new_connection );
}
}
boost::asio::ip::tcp::acceptor acceptor_;
Run Code Online (Sandbox Code Playgroud)
acceptor.listen()也不抛出.
如何在boost :: asio中监听服务器端口失败?
boost::asio::ip::tcp::acceptor您使用的构造函数具有默认参数reuse_address = true.这设置了SO_REUSEADDR套接字选项.禁用此选项,您将收到错误acceptor.listen().有关SO_REUSEADDR的更多信息,请访问此处
请注意,此选项在Windows和Linux上的处理方式不同
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |