diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-17 04:11:27 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-17 04:11:27 +0000 |
commit | 97cbab78dcc43f696077d3bbce1ee35f9d947339 (patch) | |
tree | 7570d3897cbfe9d7b45c077dbf4b760b246243cb /ext/socket/tcpsocket.c | |
parent | 8ae8afa649e7f59bfddf60dcb9fb844c02b3dc95 (diff) | |
download | ruby-97cbab78dcc43f696077d3bbce1ee35f9d947339.tar.gz |
* 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
Diffstat (limited to 'ext/socket/tcpsocket.c')
-rw-r--r-- | ext/socket/tcpsocket.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ext/socket/tcpsocket.c b/ext/socket/tcpsocket.c new file mode 100644 index 0000000000..76d938aaf4 --- /dev/null +++ b/ext/socket/tcpsocket.c @@ -0,0 +1,67 @@ +/************************************************ + + tcpsocket.c - + + created at: Thu Mar 31 12:21:29 JST 1994 + + Copyright (C) 1993-2007 Yukihiro Matsumoto + +************************************************/ + +#include "rubysocket.h" + +/* + * call-seq: + * TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil) + * + * Opens a TCP connection to +remote_host+ on +remote_port+. If +local_host+ + * and +local_port+ are specified, then those parameters are used on the local + * end to establish the connection. + */ +static VALUE +tcp_init(int argc, VALUE *argv, VALUE sock) +{ + VALUE remote_host, remote_serv; + VALUE local_host, local_serv; + + rb_scan_args(argc, argv, "22", &remote_host, &remote_serv, + &local_host, &local_serv); + + return init_inetsock(sock, remote_host, remote_serv, + local_host, local_serv, INET_CLIENT); +} + +static VALUE +tcp_sockaddr(struct sockaddr *addr, size_t len) +{ + return make_ipaddr(addr); +} + +/* + * call-seq: + * TCPSocket.gethostbyname(hostname) => [official_hostname, alias_hostnames, address_family, *address_list] + * + * Lookups host information by _hostname_. + * + * TCPSocket.gethostbyname("localhost") + * #=> ["localhost", ["hal"], 2, "127.0.0.1"] + * + */ +static VALUE +tcp_s_gethostbyname(VALUE obj, VALUE host) +{ + rb_secure(3); + return make_hostent(host, sock_addrinfo(host, Qnil, SOCK_STREAM, AI_CANONNAME), + tcp_sockaddr); +} + +/* + * TCPSocket class + */ +void +Init_tcpsocket(void) +{ + rb_cTCPSocket = rb_define_class("TCPSocket", rb_cIPSocket); + rb_define_singleton_method(rb_cTCPSocket, "gethostbyname", tcp_s_gethostbyname, 1); + rb_define_method(rb_cTCPSocket, "initialize", tcp_init, -1); +} |