diff options
author | Aaron <aaron@10gen.com> | 2009-04-29 14:14:51 -0400 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2009-04-29 14:14:51 -0400 |
commit | 7d720f1f330b6b4e076e59cb1f850fac21432b50 (patch) | |
tree | fbfeb11140b997462940a849fa812e4b63d2cc47 /util | |
parent | b927e1bade37267afdc3a2beaa1791f20244b0f9 (diff) | |
download | mongo-7d720f1f330b6b4e076e59cb1f850fac21432b50.tar.gz |
add 'bind_ip' option to bind listener only to requested local interface
Diffstat (limited to 'util')
-rw-r--r-- | util/message.cpp | 6 | ||||
-rw-r--r-- | util/message.h | 3 | ||||
-rw-r--r-- | util/message_server_port.cpp | 2 | ||||
-rw-r--r-- | util/miniwebserver.cpp | 8 | ||||
-rw-r--r-- | util/miniwebserver.h | 2 |
5 files changed, 15 insertions, 6 deletions
diff --git a/util/message.cpp b/util/message.cpp index a0f3261870e..34bff740eea 100644 --- a/util/message.cpp +++ b/util/message.cpp @@ -42,7 +42,11 @@ namespace mongo { /* listener ------------------------------------------------------------------- */ bool Listener::init() { - SockAddr me(port); + SockAddr me; + if ( ip.empty() ) + me = SockAddr( port ); + else + me = SockAddr( ip.c_str(), port ); sock = ::socket(AF_INET, SOCK_STREAM, 0); if ( sock == INVALID_SOCKET ) { log() << "ERROR: listen(): invalid socket? " << errno << endl; diff --git a/util/message.h b/util/message.h index 61597fc0848..f2a135a3ed6 100644 --- a/util/message.h +++ b/util/message.h @@ -30,7 +30,7 @@ namespace mongo { class Listener { public: - Listener(int p) : port(p) { } + Listener(const string &_ip, int p) : ip(_ip), port(p) { } virtual ~Listener() {} bool init(); // set up socket int socket() const { return sock; } @@ -39,6 +39,7 @@ namespace mongo { /* spawn a thread, etc., then return */ virtual void accepted(MessagingPort *mp) = 0; private: + string ip; int port; int sock; }; diff --git a/util/message_server_port.cpp b/util/message_server_port.cpp index d39d1bffe0c..073b3d476d1 100644 --- a/util/message_server_port.cpp +++ b/util/message_server_port.cpp @@ -44,7 +44,7 @@ namespace mongo { public: PortMessageServer( int port , MessageHandler * handler ) : MessageServer( port , handler ) , - Listener( port ){ + Listener( "", port ){ uassert( "multiple PortMessageServer not supported" , ! pms::handler ); pms::handler = handler; diff --git a/util/miniwebserver.cpp b/util/miniwebserver.cpp index 7fe93c49bfd..355566f862f 100644 --- a/util/miniwebserver.cpp +++ b/util/miniwebserver.cpp @@ -28,9 +28,13 @@ namespace mongo { sock = 0; } - bool MiniWebServer::init(int _port) { + bool MiniWebServer::init(const string &ip, int _port) { port = _port; - SockAddr me(port); + SockAddr me; + if ( ip.empty() ) + me = SockAddr( port ); + else + me = SockAddr( ip.c_str(), port ); sock = ::socket(AF_INET, SOCK_STREAM, 0); if ( sock == INVALID_SOCKET ) { log() << "ERROR: MiniWebServer listen(): invalid socket? " << errno << endl; diff --git a/util/miniwebserver.h b/util/miniwebserver.h index fdeead967dd..f9ced53c3d6 100644 --- a/util/miniwebserver.h +++ b/util/miniwebserver.h @@ -27,7 +27,7 @@ namespace mongo { MiniWebServer(); virtual ~MiniWebServer() {} - bool init(int _port); + bool init(const string &ip, int _port); void run(); virtual void doRequest( |