summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2009-04-29 14:14:51 -0400
committerAaron <aaron@10gen.com>2009-04-29 14:14:51 -0400
commit7d720f1f330b6b4e076e59cb1f850fac21432b50 (patch)
treefbfeb11140b997462940a849fa812e4b63d2cc47 /util
parentb927e1bade37267afdc3a2beaa1791f20244b0f9 (diff)
downloadmongo-7d720f1f330b6b4e076e59cb1f850fac21432b50.tar.gz
add 'bind_ip' option to bind listener only to requested local interface
Diffstat (limited to 'util')
-rw-r--r--util/message.cpp6
-rw-r--r--util/message.h3
-rw-r--r--util/message_server_port.cpp2
-rw-r--r--util/miniwebserver.cpp8
-rw-r--r--util/miniwebserver.h2
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(