@@ -10,6 +10,20 @@ USERVER_NAMESPACE_BEGIN
1010
1111namespace server ::net {
1212
13+ namespace {
14+
15+ int ResolveFd (engine::io::RwBase& socket) noexcept {
16+ if (auto * raw_socket = dynamic_cast <engine::io::Socket*>(&socket)) {
17+ return raw_socket->Fd ();
18+ }
19+ if (auto * tls_socket = dynamic_cast <engine::io::TlsWrapper*>(&socket)) {
20+ return tls_socket->GetRawFd ();
21+ }
22+ return -2 ;
23+ }
24+
25+ } // namespace
26+
1327ConnectionBase::ConnectionBase (
1428 std::unique_ptr<engine::io::RwBase> socket,
1529 std::string peer_name,
@@ -20,6 +34,7 @@ ConnectionBase::ConnectionBase(
2034 : stats_(stats),
2135 reader_ (config, std::move(peer_name)),
2236 socket_(std::move(socket)),
37+ fd_(socket_ ? ResolveFd(*socket_) : -2),
2338 config_(config),
2439 request_handler_(request_handler)
2540{
@@ -73,19 +88,7 @@ void ConnectionBase::StopAcceptingRequests() noexcept { is_accepting_requests_ =
7388
7489bool ConnectionBase::IsResponseChainValid () const noexcept { return is_response_chain_valid_; }
7590
76- int ConnectionBase::GetFd () const {
77- auto * socket = dynamic_cast <engine::io::Socket*>(socket_.get ());
78- if (socket) {
79- return socket->Fd ();
80- }
81-
82- auto * tls_socket = dynamic_cast <engine::io::TlsWrapper*>(socket_.get ());
83- if (tls_socket) {
84- return tls_socket->GetRawFd ();
85- }
86-
87- return -2 ;
88- }
91+ int ConnectionBase::GetFd () const { return fd_; }
8992
9093bool ConnectionBase::IsValid () const noexcept { return !!socket_; }
9194
0 commit comments