Skip to content

Commit 16a6627

Browse files
committed
Adding explicit calls to close sockets from the client side.
1 parent 4d336e7 commit 16a6627

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

boost/network/protocol/http/impl/sync_connection_base.hpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,23 @@ namespace boost { namespace network { namespace http { namespace impl {
216216

217217
void read_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
218218
connection_base::read_body(socket_, response_, response_buffer);
219+
typename headers_range<basic_response<Tag> >::type connection_range =
220+
headers(response_)["Connection"];
221+
if (version_major == 1 && version_minor == 1 && !empty(connection_range) && boost::iequals(begin(connection_range)->second, "close")) {
222+
close_socket();
223+
} else if (version_major == 1 && version_minor == 0) {
224+
close_socket();
225+
}
219226
}
220227

221228
bool is_open() {
222229
return socket_.lowest_layer().is_open();
223230
}
224231

225232
void close_socket() {
226-
if (is_open()) {
227-
boost::system::error_code ignored;
228-
socket_.lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored);
229-
}
233+
boost::system::error_code ignored;
234+
socket_.lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored);
235+
socket_.lowest_layer().close(ignored);
230236
}
231237

232238
~https_sync_connection() {
@@ -272,15 +278,21 @@ namespace boost { namespace network { namespace http { namespace impl {
272278

273279
void read_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
274280
connection_base::read_body(socket_, response_, response_buffer);
281+
typename headers_range<basic_response<Tag> >::type connection_range =
282+
headers(response_)["Connection"];
283+
if (version_major == 1 && version_minor == 1 && !empty(connection_range) && boost::iequals(begin(connection_range)->second, "close")) {
284+
close_socket();
285+
} else if (version_major == 1 && version_minor == 0) {
286+
close_socket();
287+
}
275288
}
276289

277290
bool is_open() { return socket_.is_open(); }
278291

279292
void close_socket() {
280-
if (is_open()) {
281-
boost::system::error_code ignored;
282-
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored);
283-
}
293+
boost::system::error_code ignored;
294+
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored);
295+
socket_.close(ignored);
284296
}
285297

286298
~http_sync_connection() {

boost/network/protocol/http/policies/pooled_connection.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,13 @@ namespace boost { namespace network { namespace http {
8888
pimpl->read_body(response_, response_buffer);
8989
}
9090

91+
typename headers_range<basic_response<Tag> >::type connection_range = headers(response_)["Connection"];
92+
if (version_major == 1 && version_minor == 1 && !empty(connection_range) && begin(connection_range)->second == string_type("close")) {
93+
pimpl->close_socket();
94+
} else if (version_major == 1 && version_minor == 0) {
95+
pimpl->close_socket();
96+
}
97+
9198
if (connection_follow_redirect_) {
9299
boost::uint16_t status = response_.status();
93100
if (status >= 300 && status <= 307) {
@@ -103,11 +110,6 @@ namespace boost { namespace network { namespace http {
103110
}
104111
}
105112

106-
typename headers_range<basic_response<Tag> >::type connection_range = headers(response_)["Connection"];
107-
if (!empty(connection_range) && begin(connection_range)->second == string_type("close")) {
108-
pimpl->close_socket();
109-
}
110-
111113
return response_;
112114
} while(true);
113115
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy