aboutsummaryrefslogtreecommitdiffstats
path: root/ext/socket/init.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-09 13:56:43 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-09 13:56:43 +0000
commitf5da7031b91426f362e8ec2101bf794976ecc590 (patch)
tree4d360cb11fc6daa19f831c1a30baecad4351515a /ext/socket/init.c
parent2092fbcc3ad4437f066dc79a64a80236afcbdf50 (diff)
downloadruby-f5da7031b91426f362e8ec2101bf794976ecc590.tar.gz
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@22184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/init.c')
-rw-r--r--ext/socket/init.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/ext/socket/init.c b/ext/socket/init.c
index 484d27e279..f0e34d1fa8 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.
*/