summaryrefslogtreecommitdiff
path: root/ext/socket/socket.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-31 02:59:57 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-31 02:59:57 +0000
commit189febdf243244c963d5a370601eabd4423ac2f7 (patch)
tree99501ac9225787360959adfeceda8bf62f709ffc /ext/socket/socket.c
parentd3bb9ea1128c1f98b3aede3228f77a4d79241382 (diff)
* pack.c (pack_pack): raises RangeError if uv is out of UTF8 value
range. [ruby-dev:23281] * io.c (rb_io_binmode): stdio buffer should be empty when calling IO#binmode. [ruby-talk:96155] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/socket.c')
-rw-r--r--ext/socket/socket.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index e62837891b..3bbc5fc8ea 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -529,6 +529,15 @@ bsock_do_not_rev_lookup_set(self, val)
}
static void
+raise_socket_error(reason, error)
+ char *reason;
+ int error;
+{
+ if (error == EAI_SYSTEM) rb_sys_fail(reason);
+ rb_raise(rb_eSocket, "%s: %s", reason, gai_strerror(error));
+}
+
+static void
make_ipaddr0(addr, buf, len)
struct sockaddr *addr;
char *buf;
@@ -538,7 +547,7 @@ make_ipaddr0(addr, buf, len)
error = getnameinfo(addr, SA_LEN(addr), buf, len, NULL, 0, NI_NUMERICHOST);
if (error) {
- rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));
+ raise_socket_error("getnameinfo", error);
}
}
@@ -680,7 +689,7 @@ sock_addrinfo(host, port, socktype, flags)
if (hostp && hostp[strlen(hostp)-1] == '\n') {
rb_raise(rb_eSocket, "newline at the end of hostname");
}
- rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));
+ raise_socket_error("getaddrinfo", error);
}
#if defined(__APPLE__) && defined(__MACH__)
@@ -744,14 +753,14 @@ ipaddr(sockaddr, norevlookup)
error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
NULL, 0, 0);
if (error) {
- rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));
+ raise_socket_error("getnameinfo", error);
}
addr1 = rb_str_new2(hbuf);
}
error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);
if (error) {
- rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));
+ raise_socket_error("getnameinfo", error);
}
addr2 = rb_str_new2(hbuf);
if (norevlookup) {
@@ -2210,7 +2219,7 @@ sock_s_getaddrinfo(argc, argv)
}
error = getaddrinfo(hptr, pptr, &hints, &res);
if (error) {
- rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));
+ raise_socket_error("getaddrinfo", error);
}
ret = make_addrinfo(res);
@@ -2347,11 +2356,11 @@ sock_s_getnameinfo(argc, argv)
error_exit_addr:
if (res) freeaddrinfo(res);
- rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));
+ raise_socket_error("getaddrinfo", error);
error_exit_name:
if (res) freeaddrinfo(res);
- rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));
+ raise_socket_error("getnameinfo", error);
}
static VALUE