summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-13 13:57:53 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-13 13:57:53 +0000
commitbadd44845e77d6813de6b18b39ab3bcd646cbf01 (patch)
tree9a2c20b37a4f2b4ffcb5a0684f8e5979c5ed8fb8 /ext
parented15422759aef6f0fa17fb9595b799b6aa487a73 (diff)
downloadruby-badd44845e77d6813de6b18b39ab3bcd646cbf01.tar.gz
* ext/socket/addrinfo.h (AI_NUMERICSERV): defined.
(AI_MASK): add AI_NUMERICSERV. * ext/socket/getaddrinfo.c (getaddrinfo): support AI_NUMERICSERV. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/socket/addrinfo.h4
-rw-r--r--ext/socket/getaddrinfo.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/ext/socket/addrinfo.h b/ext/socket/addrinfo.h
index f6061f1e26..171d3c2ce7 100644
--- a/ext/socket/addrinfo.h
+++ b/ext/socket/addrinfo.h
@@ -50,6 +50,7 @@
#undef AI_PASSIVE
#undef AI_CANONNAME
#undef AI_NUMERICHOST
+#undef AI_NUMERICSERV
#undef AI_ALL
#undef AI_ADDRCONFIG
#undef AI_V4MAPPED
@@ -107,9 +108,10 @@
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
+#define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */
/* valid flags for addrinfo */
#ifndef __HAIKU__
-#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
+#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV)
#endif
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c
index de16b9fb12..ef01a607be 100644
--- a/ext/socket/getaddrinfo.c
+++ b/ext/socket/getaddrinfo.c
@@ -375,6 +375,8 @@ getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *h
pai->ai_protocol = IPPROTO_UDP;
}
port = htons((unsigned short)atoi(servname));
+ } else if (pai->ai_flags & AI_NUMERICSERV) {
+ ERR(EAI_NONAME);
} else {
struct servent *sp;
const char *proto;