diff options
Diffstat (limited to 'src/mongo/util/net/listen.cpp')
-rw-r--r-- | src/mongo/util/net/listen.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/mongo/util/net/listen.cpp b/src/mongo/util/net/listen.cpp index 8538242faee..2cbee476522 100644 --- a/src/mongo/util/net/listen.cpp +++ b/src/mongo/util/net/listen.cpp @@ -34,14 +34,18 @@ #include "mongo/util/net/listen.h" - +#include "mongo/base/owned_pointer_vector.h" +#include "mongo/base/status.h" #include "mongo/config.h" #include "mongo/db/server_options.h" -#include "mongo/base/owned_pointer_vector.h" +#include "mongo/stdx/memory.h" #include "mongo/util/exit.h" #include "mongo/util/log.h" +#include "mongo/util/net/asio_message_port.h" #include "mongo/util/net/message_port.h" +#include "mongo/util/net/message_port_startup_param.h" #include "mongo/util/net/ssl_manager.h" +#include "mongo/util/net/ssl_options.h" #include "mongo/util/scopeguard.h" #ifndef _WIN32 @@ -92,7 +96,7 @@ vector<SockAddr> ipToAddrs(const char* ips, int port, bool useUnixSockets) { out.push_back(SockAddr("::", port)); // IPv6 all #ifndef _WIN32 if (useUnixSockets) - out.push_back(SockAddr(makeUnixSockPath(port).c_str(), port)); // Unix socket + out.push_back(SockAddr(makeUnixSockPath(port), port)); // Unix socket #endif return out; } @@ -114,7 +118,7 @@ vector<SockAddr> ipToAddrs(const char* ips, int port, bool useUnixSockets) { #ifndef _WIN32 if (sa.isValid() && useUnixSockets && (sa.getAddr() == "127.0.0.1" || sa.getAddr() == "0.0.0.0")) // only IPv4 - out.push_back(SockAddr(makeUnixSockPath(port).c_str(), port)); + out.push_back(SockAddr(makeUnixSockPath(port), port)); #endif } return out; @@ -350,7 +354,7 @@ void Listener::initAndListen() { pnewSock->secureAccepted(_ssl); } #endif - accepted(pnewSock, myConnectionNumber); + _accepted(pnewSock, myConnectionNumber); } } } @@ -566,7 +570,7 @@ void Listener::initAndListen() { pnewSock->secureAccepted(_ssl); } #endif - accepted(pnewSock, myConnectionNumber); + _accepted(pnewSock, myConnectionNumber); } } #endif @@ -583,14 +587,15 @@ void Listener::waitUntilListening() const { } } -void Listener::accepted(std::shared_ptr<Socket> psocket, long long connectionId) { - MessagingPort* port = new MessagingPort(psocket); +void Listener::_accepted(const std::shared_ptr<Socket>& psocket, long long connectionId) { + std::unique_ptr<AbstractMessagingPort> port; + if (isMessagePortImplASIO()) { + port = stdx::make_unique<ASIOMessagingPort>(psocket->stealSD(), psocket->remoteAddr()); + } else { + port = stdx::make_unique<MessagingPort>(psocket); + } port->setConnectionId(connectionId); - acceptedMP(port); -} - -void Listener::acceptedMP(MessagingPort* mp) { - verify(!"You must overwrite one of the accepted methods"); + accepted(port.release()); } // ----- ListeningSockets ------- @@ -637,6 +642,10 @@ void Listener::checkTicketNumbers() { globalTicketHolder.resize(want); } +void Listener::closeMessagingPorts(AbstractMessagingPort::Tag skipMask) { + ASIOMessagingPort::closeSockets(skipMask); + MessagingPort::closeSockets(skipMask); +} TicketHolder Listener::globalTicketHolder(DEFAULT_MAX_CONN); AtomicInt64 Listener::globalConnectionNumber; |