Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3439043

Browse files
committed
Expose OS-chosen address and port from async_server
1 parent92d41b7 commit3439043

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

‎boost/network/protocol/http/server/async_server.hpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct async_server_base : server_storage_base, socket_options_base {
4242
handler(options.handler()),
4343
address_(options.address()),
4444
port_(options.port()),
45+
protocol_(options.protocol()),
4546
thread_pool(options.thread_pool()
4647
? options.thread_pool()
4748
: std::make_shared<utils::thread_pool>()),
@@ -108,11 +109,19 @@ struct async_server_base : server_storage_base, socket_options_base {
108109
}
109110
}
110111

112+
/// Returns the server socket address, either IPv4 or IPv6 depending on
113+
/// server_options.protocol()
114+
const string_type&address()const {return address_; }
115+
116+
/// Returns the server socket port
117+
const string_type&port()const {return port_; }
118+
111119
private:
112120
typedef std::unique_lock<std::mutex> scoped_mutex_lock;
113121

114122
Handler &handler;
115123
string_type address_, port_;
124+
boost::asio::ip::tcp protocol_;
116125
std::shared_ptr<utils::thread_pool> thread_pool;
117126
boost::asio::ip::tcp::acceptor acceptor;
118127
bool stopping;
@@ -165,7 +174,7 @@ struct async_server_base : server_storage_base, socket_options_base {
165174
// this allows repeated cycles of run -> stop -> run
166175
service_.reset();
167176
tcp::resolverresolver(service_);
168-
tcp::resolver::queryquery(address_, port_);
177+
tcp::resolver::queryquery(protocol_,address_, port_);
169178
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, error);
170179
if (error) {
171180
BOOST_NETWORK_MESSAGE("Error resolving '" << address_ <<':' << port_);
@@ -185,6 +194,8 @@ struct async_server_base : server_storage_base, socket_options_base {
185194
<< port_);
186195
return;
187196
}
197+
address_ = acceptor.local_endpoint().address().to_string();
198+
port_ =std::to_string(acceptor.local_endpoint().port());
188199
acceptor.listen(boost::asio::socket_base::max_connections, error);
189200
if (error) {
190201
BOOST_NETWORK_MESSAGE("Error listening on socket: '"

‎boost/network/protocol/http/server/options.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// http://www.boost.org/LICENSE_1_0.txt)
1010

1111
#include<memory>
12+
#include<boost/asio/ip/tcp.hpp>
1213
#include<boost/asio/io_service.hpp>
1314
#include<boost/asio/socket_base.hpp>
1415
#include<boost/network/protocol/stream_handler.hpp>
@@ -34,6 +35,7 @@ struct server_options {
3435
handler_(handler),
3536
address_("localhost"),
3637
port_("80"),
38+
protocol_(boost::asio::ip::tcp::v6()),
3739
reuse_address_(false),
3840
report_aborted_(false),
3941
non_blocking_io_(true),
@@ -88,6 +90,12 @@ struct server_options {
8890
return *this;
8991
}
9092

93+
/// Set the protocol for address resolving and binding. Default is IPv6.
94+
server_options &protocol(boost::asio::ip::tcpconst &v) {
95+
protocol_ = v;
96+
return *this;
97+
}
98+
9199
/// Set whether to reuse the address (SO_REUSE_ADDR). Default is false.
92100
server_options &reuse_address(bool v) {
93101
reuse_address_ = v;
@@ -159,6 +167,9 @@ struct server_options {
159167
/// Returns the port to listen on.
160168
string_typeport()const {return port_; }
161169

170+
/// Returns the protocol used for address resolving and binding.
171+
boost::asio::ip::tcpprotocol()const {return protocol_; }
172+
162173
/// Returns a reference to the provided handler.
163174
Handler &handler()const {return handler_; }
164175

@@ -215,6 +226,7 @@ struct server_options {
215226
swap(io_service_, other.io_service_);
216227
swap(address_, other.address_);
217228
swap(port_, other.port_);
229+
swap(protocol_, other.protocol_);
218230
swap(reuse_address_, other.reuse_address_);
219231
swap(report_aborted_, other.report_aborted_);
220232
swap(non_blocking_io_, other.non_blocking_io_);
@@ -233,6 +245,7 @@ struct server_options {
233245
Handler &handler_;
234246
string_type address_;
235247
string_type port_;
248+
boost::asio::ip::tcp protocol_;
236249
bool reuse_address_;
237250
bool report_aborted_;
238251
bool non_blocking_io_;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp