diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-09 13:56:43 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-09 13:56:43 +0000 |
commit | f5da7031b91426f362e8ec2101bf794976ecc590 (patch) | |
tree | 4d360cb11fc6daa19f831c1a30baecad4351515a /ext/socket/init.c | |
parent | 2092fbcc3ad4437f066dc79a64a80236afcbdf50 (diff) | |
download | ruby-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.c | 12 |
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. */ |