From 002177069b979eb9dca0338fd62736d3ee2a90fb Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 9 Feb 2009 13:56:43 +0000 Subject: * ext/socket/rubysocket.h (level_arg): add family argument. (optname_arg): ditto. (cmsg_type_arg): ditto. (rb_sock_getfamily): declared. * ext/socket/constants.c (level_arg): add family argument. (optname_arg): ditto. (cmsg_type_arg): ditto. * ext/socket/init.c (rb_sock_getfamily): defined. * ext/socket/option.c (sockopt_initialize): give family for level_arg and optname_arg. (sockopt_s_int): ditto. * ext/socket/basicsocket.c (bsock_setsockopt): ditto. (bsock_getsockopt): ditto. * ext/socket/ancdata.c (ancillary_initialize): ditto. (ancillary_s_int): ditto. (ancillary_cmsg_is_p): ditto. (bsock_sendmsg_internal): ditto. (bsock_recvmsg_internal): use rb_sock_getfamily. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/init.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'ext/socket/init.c') diff --git a/ext/socket/init.c b/ext/socket/init.c index 484d27e27..f0e34d1fa 100644 --- a/ext/socket/init.c +++ b/ext/socket/init.c @@ -505,6 +505,18 @@ s_accept(VALUE klass, int fd, struct sockaddr *sockaddr, socklen_t *len) return init_sock(rb_obj_alloc(klass), fd2); } +int rb_sock_getfamily(int sockfd) +{ + struct sockaddr_storage ss; + socklen_t sslen = sizeof(ss); + + ss.ss_family = AF_UNSPEC; + if (getsockname(sockfd, (struct sockaddr*)&ss, &sslen) < 0) + rb_sys_fail("getsockname(2)"); + + return ss.ss_family; +} + /* * SocketError is the error class for socket. */ -- cgit