diff options
author | Yukihiro Matsumoto <matz@ruby-lang.org> | 1995-05-19 15:33:23 +0900 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-08-17 22:09:32 +0900 |
commit | 8bf1c909dc31fd4bcdc1488cda9fe89a62bc2830 (patch) | |
tree | 6899d116a280ba8f99f65e21fe9259706474c0aa /ext/socket.c | |
parent | b2420d8ffa4d347a75efbbdc376f4ce65c0eb172 (diff) |
version 0.76v0_76
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.76.tar.gz
Fri May 19 15:33:23 1995 Yukihiro Matsumoto <matz@ix-02>
* version 0.76
Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna)
* string.c (Fstr_each): イテレータブロック中で文字列の変更が行われ
たかどうかをチェック.ポインタの値が変わっていれば例外を発生する.
* ruby-mode.el: ruby-electric-braceの新設.
Thu May 18 12:27:23 1995 Yukihiro Matsumoto <matz@ix-02>
* string.c (Fstr_tr): trの置換対象に`\0'を含む時に正しく置換を行わ
ないバグがあった.更に置換文字列をASCII順に指定しないと動作しな
い問題もあった.結果としてtrを書き換えたので,copyrightの問題は
無くなった(と思う).
* gc.c (gc): the_scopeをマークしていなかったので,ローカル変数が間
違って開放される場合があった.
* gc.c (mark_locations_array): 若干の高速化.
Mon May 15 11:43:49 1995 Yukihiro Matsumoto <matz@ix-02>
* ext/extmk.rb.in: Dynamic Loadモジュールのコンパイル用チェックを
行うruby script.autoconfに近い感覚で使える.新しいモジュールを
提供したい人はextの下にディレクトリを作るだけで良い.必須のファ
イルはファイル名の一覧を記録した`MANIFEST'というファイルのみ.必
要に応じて`depend'(ファイルの依存関係を記述するファイル gcc -MM
の出力),`extconf.rb'(コンパイル用にライブラリと関数の存在チェッ
クするファイル)を用意できる.
* eval.c (rb_call): rubyメソッドの引数チェック時に未初期化の
jmp_bufを使用していた.
* parse.y: `or'と`and'の優先順位を同じにした.
Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna)
* dln.c: Linuxでは`__.SYMDEF/'であった.
* dln.c: system callのエラーチェックを忘れていた.
Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y: イテレータブロックの変数宣言を`|'で括るようにした.これ
でイテレータ変数がない時は宣言そのものを省略できる.文法の変更は
久しぶりだ.
Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c(require): loadからダイナミックロードの機能を移してきた.
さらに拡張子の補完機能を追加してユーザがdln/dlopenの差を意識する
必要のないようにした.
* string.c(sub,sub): イテレータとしても動作するように.
* object.c: init_object -> initialize.
Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02)
* NEWS-OS 3.4対応
* io.c: Solarisのstdioの動作が違うようだ.signalでEOFを返してしま
う….perlでも同様の問題がある.
Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02)
* version 0.75
* signal.c: trapがなくなっていた.うーむ.
* configure: Solaris 2.3対応.
* io.c: #elifのないcppもある.
* dir.c: autoconf 2.xへの対応が不十分
Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02)
* version 0.74
* env.h, gc.c, regex.c: IRIXへの移植対応
* configure: picを生成するoptionの検出のため,システムタイプをチェッ
クするように.
Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02)
* gc.c(xrealloc): ptr=nilの時,malloc()と同じ働きを
* array.c(astore): 空の配列の0番目の要素に代入するとsize=0で
realloc()を呼んでいた.
* configure, glob.c: Solaris 2.xでコンパイルできるように
Diffstat (limited to 'ext/socket.c')
-rw-r--r-- | ext/socket.c | 761 |
1 files changed, 0 insertions, 761 deletions
diff --git a/ext/socket.c b/ext/socket.c deleted file mode 100644 index ec992340a4..0000000000 --- a/ext/socket.c +++ /dev/null @@ -1,761 +0,0 @@ -/************************************************ - - socket.c - - - $Author: matz $ - $Date: 1995/01/10 10:42:55 $ - created at: Thu Mar 31 12:21:29 JST 1994 - -************************************************/ - -#include "ruby.h" -#ifdef HAVE_SOCKET -#include "io.h" -#include <stdio.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <errno.h> -#include <sys/un.h> - -extern VALUE C_IO; -VALUE C_BasicSocket; -VALUE C_TCPsocket; -VALUE C_TCPserver; -VALUE C_UNIXsocket; -VALUE C_UNIXserver; -VALUE C_Socket; - -FILE *rb_fdopen(); -char *strdup(); - -static VALUE -sock_new(class, fd) - VALUE class; - int fd; -{ - VALUE sock = obj_alloc(class); - OpenFile *fp; - - MakeOpenFile(sock, fp); - fp->f = rb_fdopen(fd, "r"); - setbuf(fp->f, NULL); - fp->f2 = rb_fdopen(fd, "w"); - fp->mode = FMODE_READWRITE|FMODE_SYNC; - - return sock; -} - -static VALUE -Fbsock_shutdown(argc, argv, sock) - int argc; - VALUE *argv; - VALUE sock; -{ - VALUE howto; - int how; - OpenFile *fptr; - - rb_scan_args(argc, argv, "01", &howto); - if (howto == Qnil) - how = 2; - else { - how = NUM2INT(howto); - if (how < 0 && how > 2) how = 2; - } - GetOpenFile(sock, fptr); - if (shutdown(fileno(fptr->f), how) == -1) - rb_sys_fail(Qnil); - - return INT2FIX(0); -} - -static VALUE -Fbsock_setopt(sock, lev, optname, val) - VALUE sock, lev, optname; - struct RString *val; -{ - int level, option; - OpenFile *fptr; - - level = NUM2INT(lev); - option = NUM2INT(optname); - Check_Type(val, T_STRING); - - GetOpenFile(sock, fptr); - if (setsockopt(fileno(fptr->f), level, option, val->ptr, val->len) < 0) - rb_sys_fail(fptr->path); - - return INT2FIX(0); -} - -static VALUE -Fbsock_getopt(sock, lev, optname) - VALUE sock, lev, optname; -{ - int level, option, len; - struct RString *val; - OpenFile *fptr; - - level = NUM2INT(lev); - option = NUM2INT(optname); - len = 256; - val = (struct RString*)str_new(0, len); - Check_Type(val, T_STRING); - - GetOpenFile(sock, fptr); - if (getsockopt(fileno(fptr->f), level, option, val->ptr, &len) < 0) - rb_sys_fail(fptr->path); - val->len = len; - return (VALUE)val; -} - -static VALUE -Fbsock_getsockname(sock) - VALUE sock; -{ - char buf[1024]; - int len = sizeof buf; - OpenFile *fptr; - - GetOpenFile(sock, fptr); - if (getsockname(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) - rb_sys_fail("getsockname(2)"); - return str_new(buf, len); -} - -static VALUE -Fbsock_getpeername(sock) - VALUE sock; -{ - char buf[1024]; - int len = sizeof buf; - OpenFile *fptr; - - GetOpenFile(sock, fptr); - if (getpeername(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) - rb_sys_fail("getpeername(2)"); - return str_new(buf, len); -} - -static VALUE -open_inet(class, h, serv, server) - VALUE class, h, serv; - int server; -{ - char *host; - struct hostent *hostent, _hostent; - struct servent *servent, _servent; - struct protoent *protoent; - struct sockaddr_in sockaddr; - int fd, status; - int hostaddr, hostaddrPtr[2]; - int servport; - char *syscall; - VALUE sock; - - if (h) { - Check_Type(h, T_STRING); - host = RSTRING(h)->ptr; - hostent = gethostbyname(host); - if (hostent == NULL) { - hostaddr = inet_addr(host); - if (hostaddr == -1) { - if (server && !strlen(host)) - hostaddr = INADDR_ANY; - else - rb_sys_fail(host); - } - _hostent.h_addr_list = (char **)hostaddrPtr; - _hostent.h_addr_list[0] = (char *)&hostaddr; - _hostent.h_addr_list[1] = NULL; - _hostent.h_length = sizeof(hostaddr); - _hostent.h_addrtype = AF_INET; - hostent = &_hostent; - } - } - servent = NULL; - if (FIXNUM_P(serv)) { - servport = FIX2UINT(serv); - goto setup_servent; - } - Check_Type(serv, T_STRING); - servent = getservbyname(RSTRING(serv)->ptr, "tcp"); - if (servent == NULL) { - servport = strtoul(RSTRING(serv)->ptr, Qnil, 0); - if (servport == -1) Fail("no such servce %s", RSTRING(serv)->ptr); - setup_servent: - _servent.s_port = servport; - _servent.s_proto = "tcp"; - servent = &_servent; - } - protoent = getprotobyname(servent->s_proto); - if (protoent == NULL) Fail("no such proto %s", servent->s_proto); - - fd = socket(PF_INET, SOCK_STREAM, protoent->p_proto); - - sockaddr.sin_family = AF_INET; - if (h == Qnil) { - sockaddr.sin_addr.s_addr = INADDR_ANY; - } - else { - memcpy((char *)&(sockaddr.sin_addr.s_addr), - (char *) hostent->h_addr_list[0], - (size_t) hostent->h_length); - } - sockaddr.sin_port = servent->s_port; - - if (server) { - status = bind(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - syscall = "bind(2)"; - } - else { - status = connect(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - syscall = "connect(2)"; - } - - if (status < 0) { - close (fd); - rb_sys_fail(syscall); - } - if (server) listen(fd, 5); - - /* create new instance */ - sock = sock_new(class, fd); - - return sock; -} - -static VALUE -Stcp_sock_open(class, host, serv) - VALUE class, host, serv; -{ - Check_Type(host, T_STRING); - return open_inet(class, host, serv, 0); -} - -static VALUE -Stcp_svr_open(argc, argv, class) - int argc; - VALUE *argv; - VALUE class; -{ - VALUE arg1, arg2; - - if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) - return open_inet(class, arg1, arg2, 1); - else - return open_inet(class, Qnil, arg1, 1); -} - -static VALUE -sock_accept(class, fd, sockaddr, len) - VALUE class; - int fd; - struct sockaddr *sockaddr; - int *len; -{ - int fd2; - - retry: - fd2 = accept(fd, sockaddr, len); - if (fd2 < 0) { - if (errno == EINTR) goto retry; - rb_sys_fail(Qnil); - } - return sock_new(class, fd2); -} - -static VALUE -Ftcp_accept(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_in from; - int fromlen; - - GetOpenFile(sock, fptr); - fromlen = sizeof(struct sockaddr_in); - return sock_accept(C_TCPsocket, fileno(fptr->f), - (struct sockaddr*)&from, &fromlen); -} - -static VALUE -open_unix(class, path, server) - VALUE class; - struct RString *path; - int server; -{ - struct sockaddr_un sockaddr; - int fd, status; - char *syscall; - VALUE sock; - OpenFile *fptr; - - Check_Type(path, T_STRING); - fd = socket(PF_UNIX, SOCK_STREAM, 0); - if (fd < 0) rb_sys_fail("socket(2)"); - - sockaddr.sun_family = AF_UNIX; - strncpy(sockaddr.sun_path, path->ptr, sizeof(sockaddr.sun_path)-1); - sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0'; - - if (server) { - status = bind(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - syscall = "bind(2)"; - } - else { - status = connect(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - syscall = "connect(2)"; - } - - if (status < 0) { - close (fd); - rb_sys_fail(syscall); - } - - if (server) listen(fd, 5); - - sock = sock_new(class, fd); - GetOpenFile(sock, fptr); - fptr->path = strdup(path->ptr); - - return sock; -} - -static VALUE -tcp_addr(sockaddr) - struct sockaddr_in *sockaddr; -{ - VALUE family, port, addr; - VALUE ary; - struct hostent *hostent; - - family = str_new2("AF_INET"); - hostent = gethostbyaddr((char*)&sockaddr->sin_addr.s_addr, - sizeof(sockaddr->sin_addr), - AF_INET); - if (hostent) { - addr = str_new2(hostent->h_name); - } - else { - char buf[16]; - char *a = (char*)&sockaddr->sin_addr; - sprintf(buf, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]); - addr = str_new2(buf); - } - port = INT2FIX(sockaddr->sin_port); - ary = ary_new3(3, family, port, addr); - - return ary; -} - -static VALUE -Ftcp_addr(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_in addr; - int len = sizeof addr; - - GetOpenFile(sock, fptr); - - if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) - rb_sys_fail("getsockname(2)"); - return tcp_addr(&addr); -} - -static VALUE -Ftcp_peeraddr(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_in addr; - int len = sizeof addr; - - GetOpenFile(sock, fptr); - - if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) - rb_sys_fail("getsockname(2)"); - return tcp_addr(&addr); -} - -static VALUE -Sunix_sock_open(sock, path) - VALUE sock, path; -{ - return open_unix(sock, path, 0); -} - -static VALUE -Funix_path(sock) - VALUE sock; -{ - OpenFile *fptr; - - GetOpenFile(sock, fptr); - if (fptr->path == Qnil) { - struct sockaddr_un addr; - int len = sizeof(addr); - if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) - rb_sys_fail(Qnil); - fptr->path = strdup(addr.sun_path); - } - return str_new2(fptr->path); -} - -static VALUE -Sunix_svr_open(class, path) - VALUE class, path; -{ - return open_unix(class, path, 1); -} - -static VALUE -Funix_accept(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_un from; - int fromlen; - - GetOpenFile(sock, fptr); - fromlen = sizeof(struct sockaddr_un); - return sock_accept(C_UNIXsocket, fileno(fptr->f), - (struct sockaddr*)&from, &fromlen); -} - -static VALUE -unix_addr(sockaddr) - struct sockaddr_un *sockaddr; -{ - return assoc_new(str_new2("AF_UNIX"),str_new2(sockaddr->sun_path)); -} - -static VALUE -Funix_addr(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_un addr; - int len = sizeof addr; - - GetOpenFile(sock, fptr); - - if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) - rb_sys_fail("getsockname(2)"); - return unix_addr(&addr); -} - -static VALUE -Funix_peeraddr(sock) - VALUE sock; -{ - OpenFile *fptr; - struct sockaddr_un addr; - int len = sizeof addr; - - GetOpenFile(sock, fptr); - - if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) - rb_sys_fail("getsockname(2)"); - return unix_addr(&addr); -} - -static void -setup_domain_and_type(domain, dv, type, tv) - VALUE domain, type; - int *dv, *tv; -{ - char *ptr; - - if (TYPE(domain) == T_STRING) { - ptr = RSTRING(domain)->ptr; - if (strcmp(ptr, "PF_UNIX") == 0) - *dv = PF_UNIX; - else if (strcmp(ptr, "PF_INET") == 0) - *dv = PF_INET; -#ifdef PF_IMPLINK - else if (strcmp(ptr, "PF_IMPLINK") == 0) - *dv = PF_IMPLINK; -#endif -#ifdef PF_AX25 - else if (strcmp(ptr, "PF_AX25") == 0) - *dv = PF_AX25; -#endif -#ifdef PF_IPX - else if (strcmp(ptr, "PF_IPX") == 0) - *dv = PF_IPX; -#endif - else - Fail("Unknown socket domain %s", ptr); - } - else { - *dv = NUM2INT(domain); - } - if (TYPE(type) == T_STRING) { - ptr = RSTRING(type)->ptr; - if (strcmp(ptr, "SOCK_STREAM") == 0) - *tv = SOCK_STREAM; - else if (strcmp(ptr, "SOCK_DGRAM") == 0) - *tv = SOCK_DGRAM; -#ifdef SOCK_RAW - else if (strcmp(ptr, "SOCK_RAW") == 0) - *tv = SOCK_RAW; -#endif -#ifdef SOCK_SEQPACKET - else if (strcmp(ptr, "SOCK_SEQPACKET") == 0) - *tv = SOCK_SEQPACKET; -#endif -#ifdef SOCK_RDM - else if (strcmp(ptr, "SOCK_RDM") == 0) - *tv = SOCK_RDM; -#endif -#ifdef SOCK_PACKET - else if (strcmp(ptr, "SOCK_PACKET") == 0) - *tv = SOCK_PACKET; -#endif - else - Fail("Unknown socket type %s", ptr); - } - else { - *tv = NUM2INT(type); - } -} - -static VALUE -Ssock_open(class, domain, type, protocol) - VALUE class, domain, type, protocol; -{ - int fd; - int d, t; - - setup_domain_and_type(domain, &d, type, &t); - fd = socket(d, t, NUM2INT(protocol)); - if (fd < 0) rb_sys_fail("socke(2)"); - return sock_new(class, fd); -} - -static VALUE -Ssock_for_fd(class, fd) - VALUE class, fd; -{ - return sock_new(class, NUM2INT(fd)); -} - -static VALUE -Ssock_socketpair(class, domain, type, protocol) - VALUE class, domain, type, protocol; -{ - int fd; - int d, t, sp[2]; - - setup_domain_and_type(domain, &d, type, &t); - if (socketpair(d, t, NUM2INT(protocol), sp) < 0) - rb_sys_fail("socketpair(2)"); - - return assoc_new(sock_new(class, sp[0]), sock_new(class, sp[1])); -} - -static VALUE -Fsock_connect(sock, addr) - VALUE sock; - struct RString *addr; -{ - OpenFile *fptr; - - Check_Type(addr, T_STRING); - str_modify(addr); - - GetOpenFile(sock, fptr); - if (connect(fileno(fptr->f), (struct sockaddr*)addr->ptr, addr->len) < 0) - rb_sys_fail("connect(2)"); - - return INT2FIX(0); -} - -static VALUE -Fsock_bind(sock, addr) - VALUE sock; - struct RString *addr; -{ - OpenFile *fptr; - - Check_Type(addr, T_STRING); - str_modify(addr); - - GetOpenFile(sock, fptr); - if (bind(fileno(fptr->f), (struct sockaddr*)addr->ptr, addr->len) < 0) - rb_sys_fail("bind(2)"); - - return INT2FIX(0); -} - -static VALUE -Fsock_listen(sock, log) - VALUE sock, log; -{ - OpenFile *fptr; - - GetOpenFile(sock, fptr); - if (listen(fileno(fptr->f), NUM2INT(log)) < 0) - rb_sys_fail("listen(2)"); - - return INT2FIX(0); -} - -static VALUE -Fsock_accept(sock) - VALUE sock; -{ - OpenFile *fptr; - VALUE addr, sock2; - char buf[1024]; - int len = sizeof buf; - - GetOpenFile(sock, fptr); - sock2 = sock_accept(C_Socket,fileno(fptr->f),(struct sockaddr*)buf,&len); - - return assoc_new(sock2, str_new(buf, len)); -} - -static VALUE -Fsock_send(argc, argv, sock) - int argc; - VALUE *argv; - VALUE sock; -{ - struct RString *msg, *to; - VALUE flags; - OpenFile *fptr; - FILE *f; - int fd, n; - - rb_scan_args(argc, argv, "21", &msg, &flags, &to); - - Check_Type(msg, T_STRING); - - GetOpenFile(sock, fptr); - f = fptr->f2?fptr->f2:fptr->f; - fd = fileno(f); - if (to) { - Check_Type(to, T_STRING); - n = sendto(fd, msg->ptr, msg->len, NUM2INT(flags), - (struct sockaddr*)to->ptr, to->len); - } - else { - n = send(fd, msg->ptr, msg->len, NUM2INT(flags)); - } - if (n < 0) { - rb_sys_fail("send(2)"); - } - return INT2FIX(n); -} - -static VALUE -sock_recv(sock, argc, argv, from) - VALUE sock; - int argc; - VALUE *argv; - int from; -{ - OpenFile *fptr; - FILE f; - struct RString *str; - char buf[1024]; - int fd, alen = sizeof buf; - VALUE len, flg; - int flags; - - rb_scan_args(argc, argv, "11", &len, &flg); - - if (flg == Qnil) flags = 0; - else flags = NUM2INT(flg); - - str = (struct RString*)str_new(0, NUM2INT(len)); - - GetOpenFile(sock, fptr); - fd = fileno(fptr->f); - if ((str->len = recvfrom(fd, str->ptr, str->len, flags, - (struct sockaddr*)buf, &alen)) < 0) { - rb_sys_fail("recvfrom(2)"); - } - - if (from) - return assoc_new(str, str_new(buf, alen)); - else - return (VALUE)str; -} - -static VALUE -Fsock_recv(argc, argv, sock) - int argc; - VALUE *argv; - VALUE sock; -{ - return sock_recv(sock, argc, argv, 0); -} - -static VALUE -Fsock_recvfrom(argc, argv, sock) - int argc; - VALUE *argv; - VALUE sock; -{ - return sock_recv(sock, argc, argv, 1); -} - -Init_socket () -{ -#ifdef HAVE_LIBSOCKET - dln_load_lib("libsocket.a"); -#endif - C_BasicSocket = rb_define_class("BasicSocket", C_IO); - rb_undef_method(C_BasicSocket, "new"); - rb_define_method(C_BasicSocket, "shutdown", Fbsock_shutdown, -1); - rb_define_method(C_BasicSocket, "setopt", Fbsock_setopt, 3); - rb_define_method(C_BasicSocket, "getopt", Fbsock_getopt, 2); - rb_define_method(C_BasicSocket, "getsockname", Fbsock_getsockname, 0); - rb_define_method(C_BasicSocket, "getpeername", Fbsock_getpeername, 0); - - C_TCPsocket = rb_define_class("TCPsocket", C_BasicSocket); - rb_define_single_method(C_TCPsocket, "open", Stcp_sock_open, 2); - rb_define_single_method(C_TCPsocket, "new", Stcp_sock_open, 2); - rb_define_method(C_TCPsocket, "addr", Ftcp_addr, 0); - rb_define_method(C_TCPsocket, "peeraddr", Ftcp_peeraddr, 0); - - C_TCPserver = rb_define_class("TCPserver", C_TCPsocket); - rb_define_single_method(C_TCPserver, "open", Stcp_svr_open, -1); - rb_define_single_method(C_TCPserver, "new", Stcp_svr_open, -1); - rb_define_method(C_TCPserver, "accept", Ftcp_accept, 0); - - C_UNIXsocket = rb_define_class("UNIXsocket", C_BasicSocket); - rb_define_single_method(C_UNIXsocket, "open", Sunix_sock_open, 1); - rb_define_single_method(C_UNIXsocket, "new", Sunix_sock_open, 1); - rb_define_method(C_UNIXsocket, "path", Funix_path, 0); - rb_define_method(C_UNIXsocket, "addr", Funix_addr, 0); - rb_define_method(C_UNIXsocket, "peeraddr", Funix_peeraddr, 0); - - C_UNIXserver = rb_define_class("UNIXserver", C_UNIXsocket); - rb_define_single_method(C_UNIXserver, "open", Sunix_svr_open, 1); - rb_define_single_method(C_UNIXserver, "new", Sunix_svr_open, 1); - rb_define_method(C_UNIXserver, "accept", Funix_accept, 0); - - C_Socket = rb_define_class("Socket", C_BasicSocket); - rb_define_single_method(C_Socket, "open", Ssock_open, 3); - rb_define_single_method(C_Socket, "new", Ssock_open, 3); - rb_define_single_method(C_Socket, "for_fd", Ssock_for_fd, 1); - - rb_define_method(C_Socket, "connect", Fsock_connect, 1); - rb_define_method(C_Socket, "bind", Fsock_bind, 1); - rb_define_method(C_Socket, "listen", Fsock_listen, 1); - rb_define_method(C_Socket, "accept", Fsock_accept, 0); - - rb_define_method(C_Socket, "send", Fsock_send, -1); - rb_define_method(C_Socket, "recv", Fsock_recv, -1); - rb_define_method(C_Socket, "recvfrom", Fsock_recv, -1); - - rb_define_single_method(C_Socket, "socketpair", Ssock_socketpair, 3); -} -#endif /* HAVE_SOCKET */ |