diff options
Diffstat (limited to 'osdep/OSUtils.cpp')
-rw-r--r-- | osdep/OSUtils.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/osdep/OSUtils.cpp b/osdep/OSUtils.cpp index a8639a12..0ff7bfc4 100644 --- a/osdep/OSUtils.cpp +++ b/osdep/OSUtils.cpp @@ -38,9 +38,11 @@ #include <errno.h> #include <fcntl.h> #include <sys/types.h> +#include <sys/socket.h> #include <sys/stat.h> #include <sys/uio.h> #include <dirent.h> +#include <netdb.h> #endif #ifdef __WINDOWS__ @@ -174,6 +176,34 @@ int64_t OSUtils::getFileSize(const char *path) return -1; } +std::vector<InetAddress> OSUtils::resolve(const char *name) +{ + std::vector<InetAddress> r; + std::vector<InetAddress>::iterator i; + InetAddress tmp; + struct addrinfo *ai = (struct addrinfo *)0,*p; + if (!getaddrinfo(name,(const char *)0,(const struct addrinfo *)0,&ai)) { + try { + p = ai; + while (p) { + if ((p->ai_addr)&&((p->ai_addr->sa_family == AF_INET)||(p->ai_addr->sa_family == AF_INET6))) { + tmp = *(p->ai_addr); + for(i=r.begin();i!=r.end();++i) { + if (i->ipsEqual(tmp)) + goto skip_add_inetaddr; + } + r.push_back(tmp); + } +skip_add_inetaddr: + p = p->ai_next; + } + } catch ( ... ) {} + freeaddrinfo(ai); + } + std::sort(r.begin(),r.end()); + return r; +} + bool OSUtils::readFile(const char *path,std::string &buf) { char tmp[4096]; |