From 189febdf243244c963d5a370601eabd4423ac2f7 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 31 Mar 2004 02:59:57 +0000 Subject: * 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 --- ext/socket/socket.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'ext/socket') 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 @@ -528,6 +528,15 @@ bsock_do_not_rev_lookup_set(self, val) return 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; @@ -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 -- cgit v1.2.3