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
pull/1/head
Tatsuhiro Tsujikawa 2010-02-23 13:50:35 +00:00
parent 232deb47b5
commit fa6fd758af
4 changed files with 17 additions and 9 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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