* ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
* ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined. * ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
858987b06b
commit
e2f8800667
@ -1,3 +1,11 @@
|
|||||||
|
Sun Jan 18 01:37:50 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
|
||||||
|
|
||||||
|
* ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined.
|
||||||
|
|
||||||
|
* ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared.
|
||||||
|
|
||||||
Sat Jan 17 22:01:15 2009 Tanaka Akira <akr@fsij.org>
|
Sat Jan 17 22:01:15 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/socket/lib/socket.rb: new file.
|
* ext/socket/lib/socket.rb: new file.
|
||||||
|
@ -1519,6 +1519,14 @@ sockaddr_string_value_ptr(volatile VALUE *v)
|
|||||||
return RSTRING_PTR(*v);
|
return RSTRING_PTR(*v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_check_sockaddr_string_type(VALUE val)
|
||||||
|
{
|
||||||
|
if (TYPE(val) == RUBY_T_DATA && IS_ADDRINFO(val))
|
||||||
|
return addrinfo_to_sockaddr(val);
|
||||||
|
return rb_check_string_type(val);
|
||||||
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len)
|
fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len)
|
||||||
{
|
{
|
||||||
|
@ -150,6 +150,7 @@ int Rconnect();
|
|||||||
#define SockAddrStringValuePtr(v) sockaddr_string_value_ptr(&(v))
|
#define SockAddrStringValuePtr(v) sockaddr_string_value_ptr(&(v))
|
||||||
VALUE sockaddr_string_value(volatile VALUE *);
|
VALUE sockaddr_string_value(volatile VALUE *);
|
||||||
char *sockaddr_string_value_ptr(volatile VALUE *);
|
char *sockaddr_string_value_ptr(volatile VALUE *);
|
||||||
|
VALUE rb_check_sockaddr_string_type(VALUE);
|
||||||
|
|
||||||
NORETURN(void raise_socket_error(const char *, int));
|
NORETURN(void raise_socket_error(const char *, int));
|
||||||
|
|
||||||
|
@ -1134,7 +1134,7 @@ sock_s_getnameinfo(int argc, VALUE *argv)
|
|||||||
if (!NIL_P(flags)) {
|
if (!NIL_P(flags)) {
|
||||||
fl = NUM2INT(flags);
|
fl = NUM2INT(flags);
|
||||||
}
|
}
|
||||||
tmp = rb_check_string_type(sa);
|
tmp = rb_check_sockaddr_string_type(sa);
|
||||||
if (!NIL_P(tmp)) {
|
if (!NIL_P(tmp)) {
|
||||||
sa = tmp;
|
sa = tmp;
|
||||||
if (sizeof(ss) < RSTRING_LEN(sa)) {
|
if (sizeof(ss) < RSTRING_LEN(sa)) {
|
||||||
|
@ -134,6 +134,11 @@ class TestSocketAddrInfo < Test::Unit::TestCase
|
|||||||
s3.close if s3 && !s3.closed?
|
s3.close if s3 && !s3.closed?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_socket_getnameinfo
|
||||||
|
ai = AddrInfo.udp("127.0.0.1", 8888)
|
||||||
|
assert_equal(["127.0.0.1", "8888"], Socket.getnameinfo(ai, Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV))
|
||||||
|
end
|
||||||
|
|
||||||
def test_basicsocket_local_address
|
def test_basicsocket_local_address
|
||||||
s1 = Socket.new(:INET, :DGRAM, 0)
|
s1 = Socket.new(:INET, :DGRAM, 0)
|
||||||
s1.bind(Socket.sockaddr_in(0, "127.0.0.1"))
|
s1.bind(Socket.sockaddr_in(0, "127.0.0.1"))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user