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

Commit1013faa

Browse files
committed
Tweaking and debugging HTTP server implementations.
1 parent7205bcd commit1013faa

File tree

6 files changed

+26
-27
lines changed

6 files changed

+26
-27
lines changed

‎boost/network/protocol/http/impl/response.ipp‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ namespace boost { namespace network { namespace http {
2727
template<>
2828
structbasic_response<tags::http_server> {
2929
typedef tags::http_server tag;
30+
typedef response_header<tags::http_server>::type header_type;
3031

3132
/// The status of the reply.
3233
enum status_type {
@@ -51,7 +52,7 @@ namespace boost { namespace network { namespace http {
5152
} status;
5253

5354
/// The headers to be included in the reply.
54-
typedef vector<tags::http_server>::apply<request_header<tags::http_server>::type>::type headers_vector;
55+
typedef vector<tags::http_server>::apply<header_type>::type headers_vector;
5556
headers_vector headers;
5657

5758
/// The content to be sent in the reply.
@@ -69,7 +70,7 @@ namespace boost { namespace network { namespace http {
6970
std::vector<const_buffer> buffers;
7071
buffers.push_back(to_buffer(status));
7172
for (std::size_t i =0; i < headers.size(); ++i) {
72-
request_header<tags::http_server>::type & h = headers[i];
73+
header_type & h = headers[i];
7374
buffers.push_back(buffer(h.name));
7475
buffers.push_back(buffer(name_value_separator));
7576
buffers.push_back(buffer(h.value));

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace boost { namespace network { namespace http {
4848

4949
voidrun() {
5050
listen();
51-
io_service.run();
51+
service_.run();
5252
};
5353

5454
voidstop() {
@@ -59,7 +59,6 @@ namespace boost { namespace network { namespace http {
5959
}
6060

6161
voidlisten() {
62-
if (listening)return;
6362
boost::unique_lock<boost::mutex>listening_lock(listening_mutex_);
6463
if (!listening)start_listening();
6564
}
@@ -68,8 +67,6 @@ namespace boost { namespace network { namespace http {
6867
Handler & handler;
6968
string_type address_, port_;
7069
utils::thread_pool & thread_pool;
71-
std::auto_ptr<asio::io_service> self_service;
72-
asio::io_service io_service;
7370
asio::ip::tcp::acceptor acceptor;
7471
bool stopping;
7572
connection_ptr new_connection;
@@ -83,7 +80,7 @@ namespace boost { namespace network { namespace http {
8380
if (!stopping) {
8481
new_connection.reset(
8582
newconnection(
86-
io_service
83+
service_
8784
, handler
8885
, thread_pool
8986
)
@@ -101,20 +98,20 @@ namespace boost { namespace network { namespace http {
10198

10299
voidstart_listening() {
103100
using boost::asio::ip::tcp;
104-
tcp::resolverresolver(io_service);
101+
tcp::resolverresolver(service_);
105102
tcp::resolver::queryquery(address_, port_);
106103
tcp::endpoint endpoint = *resolver.resolve(query);
107104
acceptor.open(endpoint.protocol());
108105
acceptor.bind(endpoint);
109106
socket_options_base::acceptor_options(acceptor);
110107
acceptor.listen();
111-
listening =true;
112-
new_connection.reset(newconnection(io_service, handler, thread_pool));
108+
new_connection.reset(newconnection(service_, handler, thread_pool));
113109
acceptor.async_accept(new_connection->socket(),
114110
boost::bind(
115111
&async_server_base<Tag,Handler>::handle_accept
116112
,this
117113
, boost::asio::placeholders::error));
114+
listening =true;
118115
}
119116
};
120117

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ namespace boost { namespace network { namespace http {
2525
socket_options_base(ArgPackconst & args)
2626
: acceptor_reuse_address(args[_reuse_address|false])
2727
, acceptor_report_aborted(args[_report_aborted|false])
28-
, receive_buffer_size(args[_receive_buffer_size|1024])
29-
, send_buffer_size(args[_send_buffer_size|1024])
30-
, receive_low_watermark(args[_receive_low_watermark|512])
31-
, send_low_watermark(args[_send_low_watermark|512])
28+
, receive_buffer_size(args[_receive_buffer_size|4096])
29+
, send_buffer_size(args[_send_buffer_size|4096])
30+
, receive_low_watermark(args[_receive_low_watermark|1024])
31+
, send_low_watermark(args[_send_low_watermark|1024])
3232
, non_blocking_io(args[_non_blocking_io|true])
3333
, linger(args[_linger|true], args[_linger_timeout|0])
3434
{}
@@ -39,12 +39,13 @@ namespace boost { namespace network { namespace http {
3939
}
4040

4141
voidsocket_options(boost::asio::ip::tcp::socket & socket) {
42-
socket.set_option(receive_buffer_size);
43-
socket.set_option(receive_low_watermark);
44-
socket.set_option(send_buffer_size);
45-
socket.set_option(send_low_watermark);
46-
socket.io_control(non_blocking_io);
47-
socket.set_option(linger);
42+
boost::system::error_code ignored;
43+
socket.io_control(non_blocking_io, ignored);
44+
socket.set_option(linger, ignored);
45+
socket.set_option(receive_buffer_size, ignored);
46+
socket.set_option(receive_low_watermark, ignored);
47+
socket.set_option(send_buffer_size, ignored);
48+
socket.set_option(send_low_watermark, ignored);
4849
}
4950
};
5051

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,8 @@ namespace boost { namespace network { namespace http {
6161
}
6262

6363
voidlisten() {
64-
if (listening_)return;
6564
boost::unique_lock<boost::mutex>listening_lock(listening_mutex_);
6665
if (!listening_)start_listening();
67-
listening_lock.unlock();
6866
}
6967

7068
private:
@@ -93,14 +91,14 @@ namespace boost { namespace network { namespace http {
9391
tcp::resolver::queryquery(address_, port_);
9492
tcp::endpoint endpoint = *resolver.resolve(query);
9593
acceptor_.open(endpoint.protocol());
96-
acceptor_.bind(endpoint);
9794
socket_options_base::acceptor_options(acceptor_);
95+
acceptor_.bind(endpoint);
9896
acceptor_.listen();
99-
listening_ =true;
10097
new_connection.reset(new sync_connection<Tag,Handler>(service_, handler_));
10198
acceptor_.async_accept(new_connection->socket(),
10299
boost::bind(&sync_server_base<Tag,Handler>::handle_accept,
103100
this, boost::asio::placeholders::error));
101+
listening_ =true;
104102
}
105103
};
106104

‎libs/network/test/http/server_async.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct async_hello_world {
4242
intmain(int argc,char * argv[]) {
4343
utils::thread_poolthread_pool(2);
4444
async_hello_world handler;
45-
serverinstance("127.0.0.1","8000", handler, thread_pool);
45+
serverinstance("127.0.0.1","8000", handler, thread_pool, http::_reuse_address=true);
4646
instance.run();
4747
return0;
4848
}

‎libs/network/test/http/server_hello_world.cpp‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ typedef http::server<hello_world> server;
2626
structhello_world {
2727

2828
voidoperator()(server::requestconst & request, server::response & response) {
29+
static server::response::header_type header = {"Connection","close"};
2930
response =server::response::stock_reply(server::response::ok,"Hello, World!");
31+
response.headers.push_back(header);
3032
assert(response.status == server::response::ok);
31-
assert(response.headers.size() ==2);
33+
assert(response.headers.size() ==3);
3234
assert(response.content =="Hello, World!");
3335
}
3436

@@ -41,7 +43,7 @@ struct hello_world {
4143

4244
intmain(int argc,char * argv[]) {
4345
hello_world handler;
44-
serverserver_("127.0.0.1","8000", handler);
46+
serverserver_("127.0.0.1","8000", handler, http::_reuse_address=true);
4547
server_.run();
4648
return EXIT_SUCCESS;
4749
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp