Project

General

Profile

Bug #3124 » patch-ruby_core_29427.diff

fix this problem - kimuraw (Wataru Kimura), 06/18/2010 01:00 AM

View differences:

ext/socket/raddrinfo.c (working copy)
return 0;
}
else if (FIXNUM_P(port)) {
#if defined(__APPLE__)
/* [ruby-core:29427] it seems Mac OS X cannot accept port "0" */
if (FIX2LONG(port) == 0) {
return 0;
}
#endif
snprintf(pbuf, len, "%ld", FIX2LONG(port));
#ifdef AI_NUMERICSERV
if (flags_ptr) *flags_ptr |= AI_NUMERICSERV;
......
char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
int additional_flags = 0;
#ifdef __APPLE__
if (NIL_P(host) && NIL_P(port)) {
rb_raise(rb_eSocket, "At least one of hostname and servname must be non-null.");
}
#endif
hostp = host_str(host, hbuf, sizeof(hbuf), &additional_flags);
portp = port_str(port, pbuf, sizeof(pbuf), &additional_flags);
#if defined(__APPLE__)
/* [ruby-core:29427] it seems Mac OS X cannot accept port "0" */
if (hostp == NULL && portp == NULL) {
strcpy(pbuf, "0");
portp = pbuf;
#ifdef AI_NUMERICSERV
additional_flags |= AI_NUMERICSERV;
#endif
}
#endif
if (socktype_hack && hints->ai_socktype == 0 && str_isnumber(portp)) {
hints->ai_socktype = SOCK_DGRAM;
}
test/socket/test_socket.rb (working copy)
assert_raise(SocketError) { Socket.getaddrinfo("www.kame.net", 80, "AF_UNIX") }
end
def test_getaddrinfo_raises_no_errors_on_port_argument_of_0
assert_nothing_raised("[ruby-core:29427]"){ Socket.getaddrinfo(Socket.gethostname, 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
assert_nothing_raised("[ruby-core:29427]"){ TCPServer.open('localhost', 0) }
end
def test_getnameinfo
assert_raise(SocketError) { Socket.getnameinfo(["AF_UNIX", 80, "0.0.0.0"]) }
end
(2-2/5)