Open and set socket options on the lowest layer before initiating connect_op

Summary: related to T13767

Reviewers: ivica

Reviewed By: ivica

Subscribers: miljen, iljazovic

Differential Revision: https://repo.mireo.local/D28111
This commit is contained in:
Korina Šimičević
2024-02-23 10:43:57 +01:00
parent 20f7f2fd5d
commit 3d80f47010
2 changed files with 15 additions and 8 deletions

View File

@ -90,9 +90,7 @@ public:
}
void open() {
error_code ec;
lowest_layer(*_stream_ptr).open(asio::ip::tcp::v4(), ec);
lowest_layer(*_stream_ptr).set_option(asio::ip::tcp::no_delay(true), ec);
open_lowest_layer(_stream_ptr);
}
void cancel() {
@ -155,6 +153,14 @@ public:
}
private:
static void open_lowest_layer(stream_ptr sptr) {
error_code ec;
auto& layer = lowest_layer(*sptr);
layer.open(asio::ip::tcp::v4(), ec);
layer.set_option(asio::socket_base::reuse_address(true), ec);
layer.set_option(asio::ip::tcp::no_delay(true), ec);
}
stream_ptr construct_next_layer() const {
stream_ptr sptr;
if constexpr (has_tls_context<StreamContext>)
@ -164,11 +170,12 @@ private:
else
sptr = std::make_shared<stream_type>(_stream_executor);
error_code ec;
lowest_layer(*sptr).set_option(
asio::socket_base::reuse_address(true), ec
);
return sptr;
}
stream_ptr construct_and_open_next_layer() const {
auto sptr = construct_next_layer();
open_lowest_layer(sptr);
return sptr;
}

View File

@ -143,7 +143,7 @@ public:
if (ec == asio::error::host_not_found)
return complete(asio::error::no_recovery);
auto sptr = _owner.construct_next_layer();
auto sptr = _owner.construct_and_open_next_layer();
if constexpr (has_tls_context<typename Owner::stream_context_type>)
setup_tls_sni(