summaryrefslogtreecommitdiff
path: root/src/mongo/util/net/listen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/net/listen.cpp')
-rw-r--r--src/mongo/util/net/listen.cpp35
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;