@@ -91,6 +91,7 @@ class endpoint : public config::socket_type {
91
91
explicit endpoint ()
92
92
: m_external_io_service(false )
93
93
, m_listen_backlog(0 )
94
+ , m_reuse_addr(false )
94
95
, m_state(UNINITIALIZED)
95
96
{
96
97
// std::cout << "transport::asio::endpoint constructor" << std::endl;
@@ -123,6 +124,7 @@ class endpoint : public config::socket_type {
123
124
, m_external_io_service(src.m_external_io_service)
124
125
, m_acceptor(src.m_acceptor)
125
126
, m_listen_backlog(0 )
127
+ , m_reuse_addr(src.m_reuse_addr)
126
128
, m_state(src.m_state)
127
129
{
128
130
src.m_io_service = NULL ;
@@ -137,6 +139,7 @@ class endpoint : public config::socket_type {
137
139
m_external_io_service = rhs.m_external_io_service ;
138
140
m_acceptor = rhs.m_acceptor ;
139
141
m_listen_backlog = rhs.m_listen_backlog
142
+ m_reuse_addr = rhs.m_reuse_addr ;
140
143
m_state = rhs.m_state ;
141
144
142
145
rhs.m_io_service = NULL ;
@@ -287,6 +290,24 @@ class endpoint : public config::socket_type {
287
290
void set_listen_backlog (int backlog) {
288
291
m_listen_backlog = backlog;
289
292
}
293
+
294
+ // / Sets whether or not to use the SO_REUSEADDR flag when opening a listening socket
295
+ /* *
296
+ * Specifies whether or not to use the SO_REUSEADDR TCP socket option. What this flag
297
+ * does depends on your operating system. Please consult operating system
298
+ * documentation for more details.
299
+ *
300
+ * New values affect future calls to listen only.
301
+ *
302
+ * The default is false.
303
+ *
304
+ * @since 0.4.0-alpha1
305
+ *
306
+ * @param value Whether or not to use the SO_REUSEADDR option
307
+ */
308
+ void set_reuse_addr (bool value) {
309
+ m_reuse_addr = value;
310
+ }
290
311
291
312
// / Retrieve a reference to the endpoint's io_service
292
313
/* *
@@ -324,7 +345,7 @@ class endpoint : public config::socket_type {
324
345
m_alog->write (log ::alevel::devel," asio::listen" );
325
346
326
347
m_acceptor->open (ep.protocol ());
327
- m_acceptor->set_option (boost::asio::socket_base::reuse_address (true ));
348
+ m_acceptor->set_option (boost::asio::socket_base::reuse_address (m_reuse_addr ));
328
349
m_acceptor->bind (ep);
329
350
if (m_listen_backlog == 0 ) {
330
351
m_acceptor->listen ();
@@ -1024,6 +1045,7 @@ class endpoint : public config::socket_type {
1024
1045
1025
1046
// Network constants
1026
1047
int m_listen_backlog;
1048
+ bool m_reuse_addr;
1027
1049
1028
1050
elog_type* m_elog;
1029
1051
alog_type* m_alog;
0 commit comments