mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/socket/rubysocket.h (rb_cSockOpt): declared.
(sockopt_new): ditto. (Init_sockopt): ditto. * ext/socket/init.c (Init_socket_init): call Init_sockopt. * ext/socket/depend: add dependency for option.o * ext/socket/mkconstants.rb: generate intern_level, intern_so_optname, intern_ip_optname, intern_ipv6_optname, intern_tcp_optname, intern_udp_optname and intern_scm_optname. * ext/socket/extconf.rb: add option.o. * ext/socket/basicsocket.c (bsock_setsockopt): accept Socket::Option object. (bsock_getsockopt): return Socket::Option object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a2d8643e93
commit
ef9206bbea
10 changed files with 428 additions and 8 deletions
|
@ -192,14 +192,24 @@ bsock_close_write(VALUE sock)
|
|||
*
|
||||
*/
|
||||
static VALUE
|
||||
bsock_setsockopt(VALUE sock, VALUE lev, VALUE optname, VALUE val)
|
||||
bsock_setsockopt(int argc, VALUE *argv, VALUE sock)
|
||||
{
|
||||
VALUE lev, optname, val;
|
||||
int level, option;
|
||||
rb_io_t *fptr;
|
||||
int i;
|
||||
char *v;
|
||||
int vlen;
|
||||
|
||||
if (argc == 1) {
|
||||
lev = rb_funcall(argv[0], rb_intern("level"), 0);
|
||||
optname = rb_funcall(argv[0], rb_intern("optname"), 0);
|
||||
val = rb_funcall(argv[0], rb_intern("data"), 0);
|
||||
}
|
||||
else {
|
||||
rb_scan_args(argc, argv, "30", &lev, &optname, &val);
|
||||
}
|
||||
|
||||
rb_secure(2);
|
||||
level = level_arg(lev);
|
||||
option = optname_arg(level, optname);
|
||||
|
@ -290,7 +300,7 @@ bsock_getsockopt(VALUE sock, VALUE lev, VALUE optname)
|
|||
if (getsockopt(fptr->fd, level, option, buf, &len) < 0)
|
||||
rb_sys_fail_path(fptr->pathv);
|
||||
|
||||
return rb_str_new(buf, len);
|
||||
return sockopt_new(level, option, rb_str_new(buf, len));
|
||||
#else
|
||||
rb_notimplement();
|
||||
#endif
|
||||
|
@ -626,7 +636,7 @@ Init_basicsocket(void)
|
|||
rb_define_method(rb_cBasicSocket, "close_read", bsock_close_read, 0);
|
||||
rb_define_method(rb_cBasicSocket, "close_write", bsock_close_write, 0);
|
||||
rb_define_method(rb_cBasicSocket, "shutdown", bsock_shutdown, -1);
|
||||
rb_define_method(rb_cBasicSocket, "setsockopt", bsock_setsockopt, 3);
|
||||
rb_define_method(rb_cBasicSocket, "setsockopt", bsock_setsockopt, -1);
|
||||
rb_define_method(rb_cBasicSocket, "getsockopt", bsock_getsockopt, 2);
|
||||
rb_define_method(rb_cBasicSocket, "getsockname", bsock_getsockname, 0);
|
||||
rb_define_method(rb_cBasicSocket, "getpeername", bsock_getpeername, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue