Browse Source

2010-02-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Added aiFlags argument to getInterfaceAddress(). Use
	AI_NUMERICHOST to find interface specified using
	--bt-lpd-interface option to avoid time-consuming address lookup.
	* src/BtSetup.cc
	* src/SocketCore.cc
	* src/SocketCore.h
Tatsuhiro Tsujikawa 15 years ago
parent
commit
fa6fd758af
4 changed files with 17 additions and 9 deletions
  1. 9 0
      ChangeLog
  2. 1 1
      src/BtSetup.cc
  3. 3 5
      src/SocketCore.cc
  4. 4 3
      src/SocketCore.h

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+2010-02-23  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Added aiFlags argument to getInterfaceAddress(). Use
+	AI_NUMERICHOST to find interface specified using
+	--bt-lpd-interface option to avoid time-consuming address lookup.
+	* src/BtSetup.cc
+	* src/SocketCore.cc
+	* src/SocketCore.h
+
 2010-02-23  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Return SharedHandle<LpdMessage>(new LpdMessage()) if received data

+ 1 - 1
src/BtSetup.cc

@@ -188,7 +188,7 @@ void BtSetup::setup(std::deque<Command*>& commands,
         }
       } else {
         std::vector<std::pair<sockaddr_storage, socklen_t> > ifAddrs;
-        getInterfaceAddress(ifAddrs, lpdInterface, AF_INET);
+        getInterfaceAddress(ifAddrs, lpdInterface, AF_INET, AI_NUMERICHOST);
         for(std::vector<std::pair<sockaddr_storage, socklen_t> >::const_iterator
               i = ifAddrs.begin(); i != ifAddrs.end(); ++i) {
           sockaddr_in addr;

+ 3 - 5
src/SocketCore.cc

@@ -1267,7 +1267,7 @@ void SocketCore::bindAddress(const std::string& iface)
 
 void getInterfaceAddress
 (std::vector<std::pair<struct sockaddr_storage, socklen_t> >& ifAddrs,
- const std::string& iface, int family)
+ const std::string& iface, int family, int aiFlags)
 {
   Logger* logger = LogFactory::getInstance();
   if(logger->debug()) {
@@ -1314,11 +1314,9 @@ void getInterfaceAddress
   if(ifAddrs.empty()) {
     struct addrinfo* res;
     int s;
-    s = callGetaddrinfo(&res, iface.c_str(), 0, family,
-                        SOCK_STREAM, 0, 0);
+    s = callGetaddrinfo(&res, iface.c_str(), 0, family, SOCK_STREAM, aiFlags,0);
     if(s) {
-      logger->info(MSG_INTERFACE_NOT_FOUND,
-                   iface.c_str(), gai_strerror(s));
+      logger->info(MSG_INTERFACE_NOT_FOUND, iface.c_str(), gai_strerror(s));
     } else {
       WSAAPI_AUTO_DELETE<struct addrinfo*> resDeleter(res, freeaddrinfo);
       struct addrinfo* rp;

+ 4 - 3
src/SocketCore.h

@@ -381,7 +381,7 @@ public:
 
   friend void getInterfaceAddress
   (std::vector<std::pair<struct sockaddr_storage, socklen_t> >& ifAddrs,
-   const std::string& iface, int family);
+   const std::string& iface, int family, int aiFlags);
 };
 
 // Set default ai_flags. hints.ai_flags is initialized with this
@@ -399,10 +399,11 @@ int callGetaddrinfo
 // Collects IP addresses of given inteface iface and stores in
 // ifAddres. iface may be specified as a hostname, IP address or
 // interface name like eth0. You can limit the family of IP addresses
-// to collect using family argument. No throw.
+// to collect using family argument. aiFlags is passed to
+// getaddrinfo() as hints.ai_flags. No throw.
 void getInterfaceAddress
 (std::vector<std::pair<struct sockaddr_storage, socklen_t> >& ifAddrs,
- const std::string& iface, int family = AF_UNSPEC);
+ const std::string& iface, int family = AF_UNSPEC, int aiFlags = 0);
 
 } // namespace aria2