mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/socket: split files for each class.
* ext/socket/rubysocket.h: common header. * ext/socket/basicsocket.c: new file for BasicSocket. * ext/socket/ipsocket.c: new file for IPSocket. * ext/socket/tcpsocket.c: new file for TCPSocket. * ext/socket/tcpserver.c: new file for TCPServer. * ext/socket/sockssocket.c: new file for SOCKSSocket. * ext/socket/udpsocket.c: new file for UDPSocket. * ext/socket/unixsocket.c: new file for UNIXSocket. * ext/socket/unixserver.c: new file for UNIXServer. * ext/socket/socket.c: now for Socket. * ext/socket/raddrinfo.c: new file for AddrInfo and name resolution. * ext/socket/constants.c: new file for constants. * ext/socket/init.c: new file for utilities. * ext/socket/mkconstants.rb: export *_to_int. * ext/socket/extconf.rb: add new object files. * ext/socket/depend: add dependencies for new files. * ext/.document: add new files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8ae8afa649
commit
97cbab78dc
18 changed files with 4579 additions and 4207 deletions
120
ext/socket/constants.c
Normal file
120
ext/socket/constants.c
Normal file
|
@ -0,0 +1,120 @@
|
|||
/************************************************
|
||||
|
||||
constants.c -
|
||||
|
||||
created at: Thu Mar 31 12:21:29 JST 1994
|
||||
|
||||
Copyright (C) 1993-2007 Yukihiro Matsumoto
|
||||
|
||||
************************************************/
|
||||
|
||||
#include "rubysocket.h"
|
||||
|
||||
static void sock_define_const(const char *name, int value, VALUE mConst);
|
||||
static void sock_define_uconst(const char *name, unsigned int value, VALUE mConst);
|
||||
#define sock_define_const(name, value) sock_define_const(name, value, mConst)
|
||||
#define sock_define_uconst(name, value) sock_define_uconst(name, value, mConst)
|
||||
#include "constants.h"
|
||||
#undef sock_define_const
|
||||
#undef sock_define_uconst
|
||||
|
||||
static int
|
||||
constant_arg(VALUE arg, int (*str_to_int)(char*, int, int*), const char *errmsg)
|
||||
{
|
||||
VALUE tmp;
|
||||
char *ptr;
|
||||
int ret;
|
||||
|
||||
if (SYMBOL_P(arg)) {
|
||||
arg = rb_sym_to_s(arg);
|
||||
goto str;
|
||||
}
|
||||
else if (!NIL_P(tmp = rb_check_string_type(arg))) {
|
||||
arg = tmp;
|
||||
str:
|
||||
rb_check_safe_obj(arg);
|
||||
ptr = RSTRING_PTR(arg);
|
||||
if (str_to_int(ptr, RSTRING_LEN(arg), &ret) == -1)
|
||||
rb_raise(rb_eSocket, "%s: %s", errmsg, ptr);
|
||||
}
|
||||
else {
|
||||
ret = NUM2INT(arg);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
family_arg(VALUE domain)
|
||||
{
|
||||
/* convert AF_INET, etc. */
|
||||
return constant_arg(domain, family_to_int, "unknown socket domain");
|
||||
}
|
||||
|
||||
int
|
||||
socktype_arg(VALUE type)
|
||||
{
|
||||
/* convert SOCK_STREAM, etc. */
|
||||
return constant_arg(type, socktype_to_int, "unknown socket type");
|
||||
}
|
||||
|
||||
int
|
||||
level_arg(VALUE level)
|
||||
{
|
||||
/* convert SOL_SOCKET, IPPROTO_TCP, etc. */
|
||||
return constant_arg(level, level_to_int, "unknown protocol level");
|
||||
}
|
||||
|
||||
int
|
||||
optname_arg(int level, VALUE optname)
|
||||
{
|
||||
switch (level) {
|
||||
case SOL_SOCKET:
|
||||
return constant_arg(optname, so_optname_to_int, "unknown socket level option name");
|
||||
case IPPROTO_IP:
|
||||
return constant_arg(optname, ip_optname_to_int, "unknown IP level option name");
|
||||
#ifdef IPPROTO_IPV6
|
||||
case IPPROTO_IPV6:
|
||||
return constant_arg(optname, ipv6_optname_to_int, "unknown IPv6 level option name");
|
||||
#endif
|
||||
case IPPROTO_TCP:
|
||||
return constant_arg(optname, tcp_optname_to_int, "unknown TCP level option name");
|
||||
case IPPROTO_UDP:
|
||||
return constant_arg(optname, udp_optname_to_int, "unknown UDP level option name");
|
||||
default:
|
||||
return NUM2INT(optname);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
shutdown_how_arg(VALUE how)
|
||||
{
|
||||
/* convert SHUT_RD, SHUT_WR, SHUT_RDWR. */
|
||||
return constant_arg(how, shutdown_how_to_int, "unknown shutdown argument");
|
||||
}
|
||||
|
||||
static void
|
||||
sock_define_const(const char *name, int value, VALUE mConst)
|
||||
{
|
||||
rb_define_const(rb_cSocket, name, INT2NUM(value));
|
||||
rb_define_const(mConst, name, INT2NUM(value));
|
||||
}
|
||||
|
||||
static void
|
||||
sock_define_uconst(const char *name, unsigned int value, VALUE mConst)
|
||||
{
|
||||
rb_define_const(rb_cSocket, name, UINT2NUM(value));
|
||||
rb_define_const(mConst, name, UINT2NUM(value));
|
||||
}
|
||||
|
||||
/*
|
||||
* Socket::Constants module
|
||||
*/
|
||||
void
|
||||
Init_socket_constants(void)
|
||||
{
|
||||
VALUE mConst;
|
||||
|
||||
/* constants */
|
||||
mConst = rb_define_module_under(rb_cSocket, "Constants");
|
||||
init_constants(mConst);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue