Bug #3124 » patch-ruby_core_29427.diff
| 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
|
||