ruby-changes:9714
From: akr <ko1@a...>
Date: Fri, 2 Jan 2009 00:15:54 +0900 (JST)
Subject: [ruby-changes:9714] Ruby:r21254 (trunk): * ext/socket/socket.c (family_arg): extracted from
akr 2009-01-02 00:15:31 +0900 (Fri, 02 Jan 2009) New Revision: 21254 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21254 Log: * ext/socket/socket.c (family_arg): extracted from setup_domain_and_type. (socktype_arg): ditto. (udp_init): use family_arg. (sock_s_gethostbyaddr): ditto. (sock_s_getaddrinfo): ditto. (sock_s_getnameinfo): ditto. Modified files: trunk/ChangeLog trunk/ext/socket/socket.c trunk/test/socket/test_udp.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 21253) +++ ChangeLog (revision 21254) @@ -1,3 +1,13 @@ +Fri Jan 2 00:12:27 2009 Tanaka Akira <akr@f...> + + * ext/socket/socket.c (family_arg): extracted from + setup_domain_and_type. + (socktype_arg): ditto. + (udp_init): use family_arg. + (sock_s_gethostbyaddr): ditto. + (sock_s_getaddrinfo): ditto. + (sock_s_getnameinfo): ditto. + Thu Jan 1 22:27:55 2009 Yuki Sonoda (Yugui) <yugui@y...> * spec/default.mspec: fix for builddir != srcdir Index: ext/socket/socket.c =================================================================== --- ext/socket/socket.c (revision 21253) +++ ext/socket/socket.c (revision 21254) @@ -241,6 +241,52 @@ #define close closesocket #endif +static int +family_arg(VALUE domain) +{ + /* convert AF_INET, etc. */ + VALUE tmp; + char *ptr; + int ret; + + tmp = rb_check_string_type(domain); + if (!NIL_P(tmp)) { + domain = tmp; + rb_check_safe_obj(domain); + ptr = RSTRING_PTR(domain); + if (family_to_int(ptr, RSTRING_LEN(domain), &ret) == -1) + rb_raise(rb_eSocket, "unknown socket domain %s", ptr); + } + else { + ret = NUM2INT(domain); + } + return ret; +} + +static int +socktype_arg(VALUE type) +{ + /* convert SOCK_STREAM, etc. */ + VALUE tmp; + char *ptr; + int ret; + + tmp = rb_check_string_type(type); + if (!NIL_P(tmp)) { + type = tmp; + rb_check_safe_obj(type); + ptr = RSTRING_PTR(type); + if (socktype_to_int(ptr, RSTRING_LEN(type), &ret) == -1) + rb_raise(rb_eSocket, "unknown socket type %s", ptr); + } + else { + ret = NUM2INT(type); + } + + return ret; +} + + static VALUE init_sock(VALUE sock, int fd) { @@ -1754,14 +1800,14 @@ udp_init(int argc, VALUE *argv, VALUE sock) { VALUE arg; - int socktype = AF_INET; + int family = AF_INET; int fd; rb_secure(3); if (rb_scan_args(argc, argv, "01", &arg) == 1) { - socktype = NUM2INT(arg); + family = family_arg(arg); } - fd = ruby_socket(socktype, SOCK_DGRAM, 0); + fd = ruby_socket(family, SOCK_DGRAM, 0); if (fd < 0) { rb_sys_fail("socket(2) - udp"); } @@ -2273,31 +2319,8 @@ static void setup_domain_and_type(VALUE domain, int *dv, VALUE type, int *tv) { - VALUE tmp; - char *ptr; - - tmp = rb_check_string_type(domain); - if (!NIL_P(tmp)) { - domain = tmp; - rb_check_safe_obj(domain); - ptr = RSTRING_PTR(domain); - if (family_to_int(ptr, RSTRING_LEN(domain), dv) == -1) - rb_raise(rb_eSocket, "unknown socket domain %s", ptr); - } - else { - *dv = NUM2INT(domain); - } - tmp = rb_check_string_type(type); - if (!NIL_P(tmp)) { - type = tmp; - rb_check_safe_obj(type); - ptr = RSTRING_PTR(type); - if (socktype_to_int(ptr, RSTRING_LEN(type), tv) == -1) - rb_raise(rb_eSocket, "unknown socket type %s", ptr); - } - else { - *tv = NUM2INT(type); - } + *dv = family_arg(domain); + *tv = socktype_arg(type); } static VALUE @@ -3137,17 +3160,17 @@ static VALUE sock_s_gethostbyaddr(int argc, VALUE *argv) { - VALUE addr, type; + VALUE addr, family; struct hostent *h; struct sockaddr *sa; char **pch; VALUE ary, names; int t = AF_INET; - rb_scan_args(argc, argv, "11", &addr, &type); + rb_scan_args(argc, argv, "11", &addr, &family); sa = (struct sockaddr*)StringValuePtr(addr); - if (!NIL_P(type)) { - t = NUM2INT(type); + if (!NIL_P(family)) { + t = family_arg(family); } #ifdef INET6 else if (RSTRING_LEN(addr) == 16) { @@ -3239,24 +3262,12 @@ sock_s_getaddrinfo(int argc, VALUE *argv) { VALUE host, port, family, socktype, protocol, flags, ret; - char *ap; struct addrinfo hints, *res; rb_scan_args(argc, argv, "24", &host, &port, &family, &socktype, &protocol, &flags); MEMZERO(&hints, struct addrinfo, 1); - if (NIL_P(family)) { - hints.ai_family = PF_UNSPEC; - } - else if (FIXNUM_P(family)) { - hints.ai_family = FIX2INT(family); - } - else if ((ap = StringValuePtr(family)) != 0) { - int af; - if (family_to_int(ap, RSTRING_LEN(family), &af) == -1) - rb_raise(rb_eSocket, "unknown socket domain %s", ap); - hints.ai_family = af; - } + hints.ai_family = NIL_P(family) ? PF_UNSPEC : family_arg(family); if (!NIL_P(socktype)) { hints.ai_socktype = NUM2INT(socktype); @@ -3285,7 +3296,6 @@ int error; struct sockaddr_storage ss; struct sockaddr *sap; - char *ap; sa = flags = Qnil; rb_scan_args(argc, argv, "11", &sa, &flags); @@ -3362,18 +3372,7 @@ } hints.ai_socktype = (fl & NI_DGRAM) ? SOCK_DGRAM : SOCK_STREAM; /* af */ - if (NIL_P(af)) { - hints.ai_family = PF_UNSPEC; - } - else if (FIXNUM_P(af)) { - hints.ai_family = FIX2INT(af); - } - else if ((ap = StringValuePtr(af)) != 0) { - int family; - if (family_to_int(ap, RSTRING_LEN(af), &family) == -1) - rb_raise(rb_eSocket, "unknown socket domain %s", ap); - hints.ai_family = family; - } + hints.ai_family = NIL_P(af) ? PF_UNSPEC : family_arg(af); error = getaddrinfo(hptr, pptr, &hints, &res); if (error) goto error_exit_addr; sap = res->ai_addr; Index: test/socket/test_udp.rb =================================================================== --- test/socket/test_udp.rb (revision 21253) +++ test/socket/test_udp.rb (revision 21254) @@ -6,6 +6,15 @@ class TestUDPSocket < Test::Unit::TestCase + def test_open + assert_nothing_raised { UDPSocket.open {} } + assert_nothing_raised { UDPSocket.open(Socket::AF_INET) {} } + assert_nothing_raised { UDPSocket.open("AF_INET") {} } + if defined? Socket::AF_INET6 + assert_nothing_raised { UDPSocket.open(Socket::AF_INET6) {} } + end + end + def test_connect s = UDPSocket.new host = Object.new -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/