|
16 | 16 | #include <boost/network/protocol/http/server/sync_connection.hpp>
|
17 | 17 | #include <boost/network/protocol/http/server/parameters.hpp>
|
18 | 18 | #include <boost/network/protocol/http/server/storage_base.hpp>
|
| 19 | +#include <boost/network/protocol/http/server/socket_options_base.hpp> |
19 | 20 | #include <boost/network/traits/string.hpp>
|
20 | 21 | #include <boost/thread/mutex.hpp>
|
21 | 22 |
|
22 | 23 | namespace boost { namespace network { namespace http {
|
23 | 24 |
|
24 |
| - struct socket_options_base { |
25 |
| - protected: |
26 |
| - asio::socket_base::reuse_address acceptor_reuse_address; |
27 |
| - asio::socket_base::enable_connection_aborted acceptor_report_aborted; |
28 |
| - asio::socket_base::receive_buffer_size receive_buffer_size; |
29 |
| - asio::socket_base::send_buffer_size send_buffer_size; |
30 |
| - asio::socket_base::receive_low_watermark receive_low_watermark; |
31 |
| - asio::socket_base::send_low_watermark send_low_watermark; |
32 |
| - asio::socket_base::non_blocking_io non_blocking_io; |
33 |
| - asio::socket_base::linger linger; |
34 |
| - |
35 |
| - template <class ArgPack> |
36 |
| - socket_options_base(ArgPack const & args) |
37 |
| - : acceptor_reuse_address(args[_reuse_address|false]) |
38 |
| - , acceptor_report_aborted(args[_report_aborted|false]) |
39 |
| - , receive_buffer_size(args[_receive_buffer_size|1024]) |
40 |
| - , send_buffer_size(args[_send_buffer_size|1024]) |
41 |
| - , receive_low_watermark(args[_receive_low_watermark|512]) |
42 |
| - , send_low_watermark(args[_send_low_watermark|512]) |
43 |
| - , non_blocking_io(args[_non_blocking_io|true]) |
44 |
| - , linger(args[_linger|true], args[_linger_timeout|0]) |
45 |
| - {} |
46 |
| - |
47 |
| - void acceptor_options(boost::asio::ip::tcp::acceptor & acceptor) { |
48 |
| - acceptor.set_option(acceptor_reuse_address); |
49 |
| - acceptor.set_option(acceptor_report_aborted); |
50 |
| - } |
51 |
| - |
52 |
| - void socket_options(boost::asio::ip::tcp::socket & socket) { |
53 |
| - socket.set_option(receive_buffer_size); |
54 |
| - socket.set_option(receive_low_watermark); |
55 |
| - socket.set_option(send_buffer_size); |
56 |
| - socket.set_option(send_low_watermark); |
57 |
| - socket.io_control(non_blocking_io); |
58 |
| - socket.set_option(linger); |
59 |
| - } |
60 |
| - }; |
61 |
| - |
62 | 25 | template <class Tag, class Handler>
|
63 | 26 | struct sync_server_base : server_storage_base, socket_options_base {
|
64 | 27 | typedef typename string<Tag>::type string_type;
|
@@ -98,6 +61,7 @@ namespace boost { namespace network { namespace http {
|
98 | 61 | }
|
99 | 62 |
|
100 | 63 | void listen() {
|
| 64 | + if (listening_) return; |
101 | 65 | boost::unique_lock<boost::mutex> listening_lock(listening_mutex_);
|
102 | 66 | if (!listening_) start_listening();
|
103 | 67 | listening_lock.unlock();
|
|
0 commit comments