mruby-socket: adjust local variable declarations

This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-05-18 23:35:52 +09:00
parent bd7efbe75f
commit 4e824048c0
+100 -126
View File
@@ -136,13 +136,13 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass)
{
struct addrinfo hints = {0}, *addr;
mrb_value family, protocol, service, socktype;
mrb_int flags;
const char *hostname, *servname = NULL;
mrb_int flags = 0;
const char *hostname;
family = socktype = protocol = mrb_nil_value();
flags = 0;
mrb_get_args(mrb, "z!o|oooi", &hostname, &service, &family, &socktype, &protocol, &flags);
const char *servname = NULL;
if (mrb_string_p(service)) {
servname = RSTRING_CSTR(mrb, service);
}
@@ -182,24 +182,21 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass)
static mrb_value
mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self)
{
mrb_int flags;
mrb_value ary, host, sastr, serv;
int error;
mrb_int flags = 0;
flags = 0;
mrb_get_args(mrb, "|i", &flags);
host = mrb_str_new_capa(mrb, NI_MAXHOST);
serv = mrb_str_new_capa(mrb, NI_MAXSERV);
sastr = mrb_iv_get(mrb, self, MRB_IVSYM(sockaddr));
mrb_value host = mrb_str_new_capa(mrb, NI_MAXHOST);
mrb_value serv = mrb_str_new_capa(mrb, NI_MAXSERV);
mrb_value sastr = mrb_iv_get(mrb, self, MRB_IVSYM(sockaddr));
if (!mrb_string_p(sastr)) {
mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr");
}
error = getnameinfo((struct sockaddr*)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr), RSTRING_PTR(host), NI_MAXHOST, RSTRING_PTR(serv), NI_MAXSERV, (int)flags);
int error = getnameinfo((struct sockaddr*)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr), RSTRING_PTR(host), NI_MAXHOST, RSTRING_PTR(serv), NI_MAXSERV, (int)flags);
if (error) {
mrb_raisef(mrb, E_SOCKET_ERROR, "getnameinfo: %s", gai_strerror(error));
}
ary = mrb_ary_new_capa(mrb, 2);
mrb_value ary = mrb_ary_new_capa(mrb, 2);
mrb_str_resize(mrb, host, strlen(RSTRING_PTR(host)));
mrb_ary_push(mrb, ary, host);
mrb_str_resize(mrb, serv, strlen(RSTRING_PTR(serv)));
@@ -211,9 +208,8 @@ mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self)
{
mrb_value sastr;
mrb_value sastr = mrb_iv_get(mrb, self, MRB_IVSYM(sockaddr));
sastr = mrb_iv_get(mrb, self, MRB_IVSYM(sockaddr));
if (!mrb_string_p(sastr) || ((struct sockaddr*)RSTRING_PTR(sastr))->sa_family != AF_UNIX)
mrb_raise(mrb, E_SOCKET_ERROR, "need AF_UNIX address");
if (RSTRING_LEN(sastr) < (mrb_int)offsetof(struct sockaddr_un, sun_path) + 1) {
@@ -228,9 +224,8 @@ mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self)
static mrb_value
sa2addrlist(mrb_state *mrb, const struct sockaddr *sa, socklen_t salen)
{
mrb_value ary, host;
unsigned short port;
const char *afstr;
unsigned short port;
switch (sa->sa_family) {
case AF_INET:
@@ -246,11 +241,12 @@ sa2addrlist(mrb_state *mrb, const struct sockaddr *sa, socklen_t salen)
return mrb_nil_value();
}
port = ntohs(port);
host = mrb_str_new_capa(mrb, NI_MAXHOST);
mrb_value host = mrb_str_new_capa(mrb, NI_MAXHOST);
if (getnameinfo(sa, salen, RSTRING_PTR(host), NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == -1)
mrb_sys_fail(mrb, "getnameinfo");
mrb_str_resize(mrb, host, strlen(RSTRING_PTR(host)));
ary = mrb_ary_new_capa(mrb, 4);
mrb_value ary = mrb_ary_new_capa(mrb, 4);
mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, afstr));
mrb_ary_push(mrb, ary, mrb_fixnum_value(port));
mrb_ary_push(mrb, ary, host);
@@ -270,9 +266,8 @@ static int
socket_family(int s)
{
struct sockaddr_storage ss;
socklen_t salen;
socklen_t salen = sizeof(ss);
salen = sizeof(ss);
if (getsockname(s, (struct sockaddr*)&ss, &salen) == -1)
return AF_UNSPEC;
return ss.ss_family;
@@ -282,16 +277,13 @@ static mrb_value
mrb_basicsocket_getpeereid(mrb_state *mrb, mrb_value self)
{
#ifdef HAVE_GETPEEREID
mrb_value ary;
gid_t egid;
uid_t euid;
int s;
s = socket_fd(mrb, self);
int s = socket_fd(mrb, self);
if (getpeereid(s, &euid, &egid) != 0)
mrb_sys_fail(mrb, "getpeereid");
ary = mrb_ary_new_capa(mrb, 2);
mrb_value ary = mrb_ary_new_capa(mrb, 2);
mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)euid));
mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)egid));
return ary;
@@ -305,9 +297,8 @@ static mrb_value
mrb_basicsocket_getpeername(mrb_state *mrb, mrb_value self)
{
struct sockaddr_storage ss;
socklen_t salen;
socklen_t salen = sizeof(ss);
salen = sizeof(ss);
if (getpeername(socket_fd(mrb, self), (struct sockaddr*)&ss, &salen) != 0)
mrb_sys_fail(mrb, "getpeername");
@@ -318,9 +309,8 @@ static mrb_value
mrb_basicsocket_getsockname(mrb_state *mrb, mrb_value self)
{
struct sockaddr_storage ss;
socklen_t salen;
socklen_t salen = sizeof(ss);
salen = sizeof(ss);
if (getsockname(socket_fd(mrb, self), (struct sockaddr*)&ss, &salen) != 0)
mrb_sys_fail(mrb, "getsockname");
@@ -353,10 +343,10 @@ socket_option_s_bool(mrb_state *mrb, mrb_value klass)
{
mrb_value args[4];
mrb_bool data;
int tmp;
mrb_get_args(mrb, "ooob", &args[0], &args[1], &args[2], &data);
tmp = (int)data;
int tmp = (int)data;
args[3] = mrb_str_new(mrb, (char*)&tmp, sizeof(int));
return mrb_obj_new(mrb, mrb_class_ptr(klass), 4, args);
}
@@ -366,10 +356,10 @@ socket_option_s_int(mrb_state *mrb, mrb_value klass)
{
mrb_value args[4];
mrb_int data;
int tmp;
mrb_get_args(mrb, "oooi", &args[0], &args[1], &args[2], &data);
tmp = (int)data;
int tmp = (int)data;
args[3] = mrb_str_new(mrb, (char*)&tmp, sizeof(int));
return mrb_obj_new(mrb, mrb_class_ptr(klass), 4, args);
}
@@ -402,11 +392,12 @@ static int
option_int(mrb_state *mrb, mrb_value self)
{
mrb_value data = mrb_obj_as_string(mrb, mrb_iv_get(mrb, self, MRB_SYM(data)));
int tmp;
if (RSTRING_LEN(data) != sizeof(int)) {
mrb_raisef(mrb, E_TYPE_ERROR, "size differ; expected as sizeof(int)=%i but %i", (mrb_int)sizeof(int), RSTRING_LEN(data));
}
int tmp;
memcpy((char*)&tmp, RSTRING_PTR(data), sizeof(int));
return tmp;
}
@@ -491,19 +482,18 @@ socket_option_inspect(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self)
{
char opt[8];
int s;
mrb_int family, level, optname;
mrb_value data;
socklen_t optlen;
mrb_int level, optname;
mrb_get_args(mrb, "ii", &level, &optname);
s = socket_fd(mrb, self);
optlen = sizeof(opt);
int s = socket_fd(mrb, self);
char opt[8];
socklen_t optlen = sizeof(opt);
if (getsockopt(s, (int)level, (int)optname, opt, &optlen) == -1)
mrb_sys_fail(mrb, "getsockopt");
family = socket_family(s);
data = mrb_str_new(mrb, opt, optlen);
mrb_int family = socket_family(s);
mrb_value data = mrb_str_new(mrb, opt, optlen);
mrb_value args[4] = {mrb_fixnum_value(family), mrb_fixnum_value(level), mrb_fixnum_value(optname), data};
return mrb_obj_new(mrb, socket_option_class(mrb), 4, args);
}
@@ -511,13 +501,12 @@ mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_recv(mrb_state *mrb, mrb_value self)
{
ssize_t n;
mrb_int maxlen, flags = 0;
mrb_value buf;
mrb_get_args(mrb, "i|i", &maxlen, &flags);
buf = mrb_str_new_capa(mrb, maxlen);
n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags);
mrb_value buf = mrb_str_new_capa(mrb, maxlen);
ssize_t n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags);
if (n == -1)
mrb_sys_fail(mrb, "recv");
mrb_str_resize(mrb, buf, (mrb_int)n);
@@ -527,21 +516,20 @@ mrb_basicsocket_recv(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self)
{
ssize_t n;
mrb_int maxlen, flags = 0;
mrb_value ary, buf, sa;
socklen_t socklen;
mrb_get_args(mrb, "i|i", &maxlen, &flags);
buf = mrb_str_new_capa(mrb, maxlen);
socklen = sizeof(struct sockaddr_storage);
sa = mrb_str_new_capa(mrb, socklen);
n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr*)RSTRING_PTR(sa), &socklen);
mrb_value buf = mrb_str_new_capa(mrb, maxlen);
socklen_t socklen = sizeof(struct sockaddr_storage);
mrb_value sa = mrb_str_new_capa(mrb, socklen);
ssize_t n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr*)RSTRING_PTR(sa), &socklen);
if (n == -1)
mrb_sys_fail(mrb, "recvfrom");
mrb_str_resize(mrb, buf, (mrb_int)n);
mrb_str_resize(mrb, sa, (mrb_int)socklen);
ary = mrb_ary_new_capa(mrb, 2);
mrb_value ary = mrb_ary_new_capa(mrb, 2);
mrb_ary_push(mrb, ary, buf);
mrb_ary_push(mrb, ary, sa);
return ary;
@@ -550,12 +538,13 @@ mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_send(mrb_state *mrb, mrb_value self)
{
ssize_t n;
mrb_int flags;
mrb_value dest, mesg;
mrb_value mesg;
mrb_value dest = mrb_nil_value();
dest = mrb_nil_value();
mrb_get_args(mrb, "Si|S", &mesg, &flags, &dest);
ssize_t n;
if (mrb_nil_p(dest)) {
n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags);
}
@@ -570,20 +559,19 @@ mrb_basicsocket_send(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_setnonblock(mrb_state *mrb, mrb_value self)
{
int fd, flags;
mrb_bool nonblocking;
#ifdef _WIN32
u_long mode = 1;
#endif
mrb_get_args(mrb, "b", &nonblocking);
fd = socket_fd(mrb, self);
int fd = socket_fd(mrb, self);
#ifdef _WIN32
flags = ioctlsocket(fd, FIONBIO, &mode);
int flags = ioctlsocket(fd, FIONBIO, &mode);
if (flags != NO_ERROR)
mrb_sys_fail(mrb, "ioctlsocket");
#else
flags = fcntl(fd, F_GETFL, 0);
int flags = fcntl(fd, F_GETFL, 0);
if (flags == 1)
mrb_sys_fail(mrb, "fcntl");
if (nonblocking)
@@ -599,11 +587,10 @@ mrb_basicsocket_setnonblock(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self)
{
int s;
mrb_int argc, level = 0, optname;
mrb_value optval, so;
mrb_int level = 0, optname;
mrb_value so, optval;
mrb_int argc = mrb_get_args(mrb, "o|io", &so, &optname, &optval);
argc = mrb_get_args(mrb, "o|io", &so, &optname, &optval);
if (argc == 3) {
mrb_ensure_int_type(mrb, so);
level = mrb_integer(so);
@@ -640,7 +627,7 @@ mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self)
mrb_argnum_error(mrb, argc, 3, 3);
}
s = socket_fd(mrb, self);
int s = socket_fd(mrb, self);
if (setsockopt(s, (int)level, (int)optname, RSTRING_PTR(optval), (socklen_t)RSTRING_LEN(optval)) == -1)
mrb_sys_fail(mrb, "setsockopt");
return mrb_fixnum_value(0);
@@ -661,10 +648,9 @@ static mrb_value
mrb_basicsocket_set_is_socket(mrb_state *mrb, mrb_value self)
{
mrb_bool b;
struct mrb_io *io_p;
mrb_get_args(mrb, "b", &b);
io_p = (struct mrb_io*)DATA_PTR(self);
struct mrb_io *io_p = (struct mrb_io*)DATA_PTR(self);
if (io_p) {
io_p->is_socket = b;
}
@@ -723,25 +709,23 @@ static mrb_value
mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self)
{
struct sockaddr_storage ss;
socklen_t socklen;
mrb_value a, buf, pair;
mrb_int flags, maxlen;
ssize_t n;
int fd;
mrb_int maxlen;
mrb_int flags = 0;
fd = socket_fd(mrb, self);
flags = 0;
mrb_get_args(mrb, "i|i", &maxlen, &flags);
buf = mrb_str_new_capa(mrb, maxlen);
socklen = sizeof(ss);
n = recvfrom(fd, RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags,
(struct sockaddr*)&ss, &socklen);
mrb_value buf = mrb_str_new_capa(mrb, maxlen);
socklen_t socklen = sizeof(ss);
int fd = socket_fd(mrb, self);
ssize_t n = recvfrom(fd, RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags,
(struct sockaddr*)&ss, &socklen);
if (n == -1) {
mrb_sys_fail(mrb, "recvfrom");
}
mrb_str_resize(mrb, buf, (mrb_int)n);
a = sa2addrlist(mrb, (struct sockaddr*)&ss, socklen);
pair = mrb_ary_new_capa(mrb, 2);
mrb_value a = sa2addrlist(mrb, (struct sockaddr*)&ss, socklen);
mrb_value pair = mrb_ary_new_capa(mrb, 2);
mrb_ary_push(mrb, pair, buf);
mrb_ary_push(mrb, pair, a);
return pair;
@@ -750,15 +734,13 @@ mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_socket_gethostname(mrb_state *mrb, mrb_value cls)
{
mrb_value buf;
size_t bufsize;
#ifdef HOST_NAME_MAX
bufsize = HOST_NAME_MAX + 1;
size_t bufsize = HOST_NAME_MAX + 1;
#else
bufsize = 256;
size_t bufsize = 256;
#endif
buf = mrb_str_new_capa(mrb, (mrb_int)bufsize);
mrb_value buf = mrb_str_new_capa(mrb, (mrb_int)bufsize);
if (gethostname(RSTRING_PTR(buf), (fsize_t)bufsize) != 0)
mrb_sys_fail(mrb, "gethostname");
mrb_str_resize(mrb, buf, (mrb_int)strlen(RSTRING_PTR(buf)));
@@ -768,11 +750,10 @@ mrb_socket_gethostname(mrb_state *mrb, mrb_value cls)
static mrb_value
mrb_socket_accept(mrb_state *mrb, mrb_value klass)
{
int s1;
mrb_int s0;
mrb_get_args(mrb, "i", &s0);
s1 = (int)accept(s0, NULL, NULL);
int s1 = (int)accept(s0, NULL, NULL);
if (s1 == -1) {
mrb_sys_fail(mrb, "accept");
}
@@ -782,21 +763,20 @@ mrb_socket_accept(mrb_state *mrb, mrb_value klass)
static mrb_value
mrb_socket_accept2(mrb_state *mrb, mrb_value klass)
{
mrb_value ary, sastr;
int s1;
mrb_int s0;
socklen_t socklen;
mrb_get_args(mrb, "i", &s0);
socklen = sizeof(struct sockaddr_storage);
sastr = mrb_str_new_capa(mrb, (mrb_int)socklen);
s1 = (int)accept(s0, (struct sockaddr*)RSTRING_PTR(sastr), &socklen);
socklen_t socklen = sizeof(struct sockaddr_storage);
mrb_value sastr = mrb_str_new_capa(mrb, (mrb_int)socklen);
int s1 = (int)accept(s0, (struct sockaddr*)RSTRING_PTR(sastr), &socklen);
if (s1 == -1) {
mrb_sys_fail(mrb, "accept");
}
// XXX: possible descriptor leakage here!
mrb_str_resize(mrb, sastr, socklen);
ary = mrb_ary_new_capa(mrb, 2);
mrb_value ary = mrb_ary_new_capa(mrb, 2);
mrb_ary_push(mrb, ary, mrb_fixnum_value(s1));
mrb_ary_push(mrb, ary, sastr);
return ary;
@@ -831,7 +811,7 @@ mrb_socket_connect(mrb_state *mrb, mrb_value klass)
static mrb_value
mrb_socket_listen(mrb_state *mrb, mrb_value klass)
{
mrb_int backlog, s;
mrb_int s, backlog;
mrb_get_args(mrb, "ii", &s, &backlog);
if (listen((int)s, (int)backlog) == -1) {
@@ -843,8 +823,8 @@ mrb_socket_listen(mrb_state *mrb, mrb_value klass)
static mrb_value
mrb_socket_sockaddr_family(mrb_state *mrb, mrb_value klass)
{
const struct sockaddr *sa;
mrb_value str;
const struct sockaddr *sa;
mrb_get_args(mrb, "S", &str);
if ((size_t)RSTRING_LEN(str) < offsetof(struct sockaddr, sa_family) + sizeof(sa->sa_family)) {
@@ -861,14 +841,14 @@ mrb_socket_sockaddr_un(mrb_state *mrb, mrb_value klass)
mrb_raise(mrb, E_NOTIMP_ERROR, "sockaddr_un unsupported on Windows");
return mrb_nil_value();
#else
mrb_value path;
struct sockaddr_un *sunp;
mrb_value path, s;
mrb_get_args(mrb, "S", &path);
if ((size_t)RSTRING_LEN(path) > sizeof(sunp->sun_path) - 1) {
mrb_raisef(mrb, E_ARGUMENT_ERROR, "too long unix socket path (max: %d bytes)", (int)sizeof(sunp->sun_path) - 1);
}
s = mrb_str_new_capa(mrb, sizeof(struct sockaddr_un));
mrb_value s = mrb_str_new_capa(mrb, sizeof(struct sockaddr_un));
sunp = (struct sockaddr_un*)RSTRING_PTR(s);
#if HAVE_SA_LEN
sunp->sun_len = sizeof(struct sockaddr_un);
@@ -888,7 +868,6 @@ mrb_socket_socketpair(mrb_state *mrb, mrb_value klass)
mrb_raise(mrb, E_NOTIMP_ERROR, "socketpair unsupported on Windows");
return mrb_nil_value();
#else
mrb_value ary;
mrb_int domain, type, protocol;
int sv[2];
@@ -897,7 +876,7 @@ mrb_socket_socketpair(mrb_state *mrb, mrb_value klass)
mrb_sys_fail(mrb, "socketpair");
}
// XXX: possible descriptor leakage here!
ary = mrb_ary_new_capa(mrb, 2);
mrb_value ary = mrb_ary_new_capa(mrb, 2);
mrb_ary_push(mrb, ary, mrb_fixnum_value(sv[0]));
mrb_ary_push(mrb, ary, mrb_fixnum_value(sv[1]));
return ary;
@@ -908,10 +887,10 @@ static mrb_value
mrb_socket_socket(mrb_state *mrb, mrb_value klass)
{
mrb_int domain, type, protocol;
int s;
mrb_get_args(mrb, "iii", &domain, &type, &protocol);
s = (int)socket((int)domain, (int)type, (int)protocol);
int s = (int)socket((int)domain, (int)type, (int)protocol);
if (s == -1)
mrb_sys_fail(mrb, "socket");
return mrb_fixnum_value(s);
@@ -945,7 +924,6 @@ mrb_win32_basicsocket_close(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_win32_basicsocket_sysread(mrb_state *mrb, mrb_value self)
{
int sd, ret;
mrb_value buf = mrb_nil_value();
mrb_int maxlen;
@@ -961,8 +939,8 @@ mrb_win32_basicsocket_sysread(mrb_state *mrb, mrb_value self)
buf = mrb_str_resize(mrb, buf, maxlen);
}
sd = socket_fd(mrb, self);
ret = recv(sd, RSTRING_PTR(buf), (int)maxlen, 0);
int sd = socket_fd(mrb, self);
int ret = recv(sd, RSTRING_PTR(buf), (int)maxlen, 0);
switch (ret) {
case 0: /* EOF */
@@ -996,13 +974,12 @@ mrb_win32_basicsocket_sysseek(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_win32_basicsocket_syswrite(mrb_state *mrb, mrb_value self)
{
int n;
SOCKET sd;
mrb_value str;
SOCKET sd = socket_fd(mrb, self);
sd = socket_fd(mrb, self);
mrb_get_args(mrb, "S", &str);
n = send(sd, RSTRING_PTR(str), (int)RSTRING_LEN(str), 0);
int n = send(sd, RSTRING_PTR(str), (int)RSTRING_LEN(str), 0);
if (n == SOCKET_ERROR)
mrb_sys_fail(mrb, "send");
return mrb_int_value(mrb, n);
@@ -1013,9 +990,6 @@ mrb_win32_basicsocket_syswrite(mrb_state *mrb, mrb_value self)
void
mrb_mruby_socket_gem_init(mrb_state* mrb)
{
struct RClass *io, *ai, *sock, *bsock, *ipsock, *tcpsock;
struct RClass *constants, *option;
#ifdef _WIN32
WSADATA wsaData;
int result;
@@ -1024,16 +998,16 @@ mrb_mruby_socket_gem_init(mrb_state* mrb)
mrb_raise(mrb, E_RUNTIME_ERROR, "WSAStartup failed");
#endif
ai = mrb_define_class(mrb, "Addrinfo", mrb->object_class);
mrb_define_class_method(mrb, ai, "getaddrinfo", mrb_addrinfo_getaddrinfo, MRB_ARGS_REQ(2)|MRB_ARGS_OPT(4));
mrb_define_method(mrb, ai, "getnameinfo", mrb_addrinfo_getnameinfo, MRB_ARGS_OPT(1));
struct RClass *ainfo = mrb_define_class(mrb, "Addrinfo", mrb->object_class);
mrb_define_class_method(mrb, ainfo, "getaddrinfo", mrb_addrinfo_getaddrinfo, MRB_ARGS_REQ(2)|MRB_ARGS_OPT(4));
mrb_define_method(mrb, ainfo, "getnameinfo", mrb_addrinfo_getnameinfo, MRB_ARGS_OPT(1));
#ifndef _WIN32
mrb_define_method(mrb, ai, "unix_path", mrb_addrinfo_unix_path, MRB_ARGS_NONE());
mrb_define_method(mrb, ainfo, "unix_path", mrb_addrinfo_unix_path, MRB_ARGS_NONE());
#endif
io = mrb_class_get_id(mrb, MRB_SYM(IO));
struct RClass *io = mrb_class_get_id(mrb, MRB_SYM(IO));
bsock = mrb_define_class(mrb, "BasicSocket", io);
struct RClass *bsock = mrb_define_class(mrb, "BasicSocket", io);
mrb_define_method(mrb, bsock, "_recvfrom", mrb_basicsocket_recvfrom, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
mrb_define_method(mrb, bsock, "_setnonblock", mrb_basicsocket_setnonblock, MRB_ARGS_REQ(1));
mrb_define_method(mrb, bsock, "getpeereid", mrb_basicsocket_getpeereid, MRB_ARGS_NONE());
@@ -1049,19 +1023,19 @@ mrb_mruby_socket_gem_init(mrb_state* mrb)
mrb_define_method(mrb, bsock, "shutdown", mrb_basicsocket_shutdown, MRB_ARGS_OPT(1));
mrb_define_method(mrb, bsock, "_is_socket=", mrb_basicsocket_set_is_socket, MRB_ARGS_REQ(1));
ipsock = mrb_define_class(mrb, "IPSocket", bsock);
struct RClass *ipsock = mrb_define_class(mrb, "IPSocket", bsock);
mrb_define_class_method(mrb, ipsock, "ntop", mrb_ipsocket_ntop, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, ipsock, "pton", mrb_ipsocket_pton, MRB_ARGS_REQ(2));
mrb_define_method(mrb, ipsock, "recvfrom", mrb_ipsocket_recvfrom, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
tcpsock = mrb_define_class(mrb, "TCPSocket", ipsock);
struct RClass *tcpsock = mrb_define_class(mrb, "TCPSocket", ipsock);
mrb_define_class_method(mrb, tcpsock, "_allocate", mrb_tcpsocket_allocate, MRB_ARGS_NONE());
mrb_define_class(mrb, "TCPServer", tcpsock);
mrb_define_class(mrb, "UDPSocket", ipsock);
//#recvfrom_nonblock
sock = mrb_define_class(mrb, "Socket", bsock);
struct RClass *sock = mrb_define_class(mrb, "Socket", bsock);
mrb_define_class_method(mrb, sock, "_accept", mrb_socket_accept, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, sock, "_accept2", mrb_socket_accept2, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, sock, "_bind", mrb_socket_bind, MRB_ARGS_REQ(3));
@@ -1098,7 +1072,7 @@ mrb_mruby_socket_gem_init(mrb_state* mrb)
mrb_define_method(mrb, bsock, "write", mrb_win32_basicsocket_syswrite, MRB_ARGS_REQ(1));
#endif
option = mrb_define_class_under(mrb, sock, "Option", mrb->object_class);
struct RClass *option = mrb_define_class_under(mrb, sock, "Option", mrb->object_class);
mrb_define_class_method(mrb, option, "bool", socket_option_s_bool, MRB_ARGS_REQ(4));
mrb_define_class_method(mrb, option, "int", socket_option_s_int, MRB_ARGS_REQ(4));
mrb_define_method(mrb, option, "initialize", socket_option_init, MRB_ARGS_REQ(4));
@@ -1113,7 +1087,7 @@ mrb_mruby_socket_gem_init(mrb_state* mrb)
mrb_define_method(mrb, option, "linger", socket_option_notimp, MRB_ARGS_REQ(0));
mrb_define_method(mrb, option, "unpack", socket_option_notimp, MRB_ARGS_REQ(1));
constants = mrb_define_module_under(mrb, sock, "Constants");
struct RClass *constants = mrb_define_module_under(mrb, sock, "Constants");
#define define_const(SYM) \
do { \