This project is closed and read-only.
Backport #3474 ยป patch-bug3124-ruby18.diff
| ext/socket/socket.c (working copy) | ||
|---|---|---|
|
#endif
|
||
|
#endif
|
||
|
static int str_isnumber __P((const char *));
|
||
|
#if defined(__APPLE__)
|
||
|
/* fix [ruby-core:29427] */
|
||
|
static int
|
||
|
ruby_getaddrinfo__darwin(const char *nodename, const char *servname,
|
||
|
struct addrinfo *hints, struct addrinfo **res)
|
||
|
{
|
||
|
const char *tmp_servname;
|
||
|
struct addrinfo tmp_hints;
|
||
|
tmp_servname = servname;
|
||
|
MEMCPY(&tmp_hints, hints, struct addrinfo, 1);
|
||
|
if (nodename && servname) {
|
||
|
if (str_isnumber(tmp_servname) && atoi(servname) == 0) {
|
||
|
tmp_servname = NULL;
|
||
|
#ifdef AI_NUMERICSERV
|
||
|
if (tmp_hints.ai_flags) tmp_hints.ai_flags &= ~AI_NUMERICSERV;
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
int error = getaddrinfo(nodename, tmp_servname, &tmp_hints, res);
|
||
|
return error;
|
||
|
}
|
||
|
#undef getaddrinfo
|
||
|
#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__darwin((node),(serv),(hints),(res))
|
||
|
#endif
|
||
|
#ifdef HAVE_CLOSESOCKET
|
||
|
#undef close
|
||
|
#define close closesocket
|
||
| test/socket/test_socket.rb (working copy) | ||
|---|---|---|
|
}
|
||
|
end
|
||
|
end
|
||
|
def test_getaddrinfo_raises_no_errors_on_port_argument_of_0 # [ruby-core:29427]
|
||
|
assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
|
||
|
assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', '0', Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
|
||
|
assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', '00', Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
|
||
|
assert_raise(SocketError, '[ruby-core:29427]'){ Socket.getaddrinfo(nil, nil, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
|
||
|
assert_nothing_raised('[ruby-core:29427]'){ TCPServer.open('localhost', 0) {} }
|
||
|
end
|
||
|
end if defined?(Socket)
|
||
|
class TestSocket < Test::Unit::TestCase
|
||