Class: TCPSocket

Inherits:
IPSocket show all
Defined in:
tcpsocket.c,
tcpsocket.c
more...

Overview

TCPSocket represents a TCP/IP client socket.

A simple client may look like:

require 'socket'

s = TCPSocket.new 'localhost', 2000

while line = s.gets # Read lines from socket
  puts line         # and print them
end

s.close             # close socket when done

Direct Known Subclasses

SOCKSSocket, TCPServer

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from IPSocket

#addr, getaddress, #inspect, #peeraddr, #recvfrom

Methods inherited from BasicSocket

#close_read, #close_write, #connect_address, do_not_reverse_lookup, #do_not_reverse_lookup, do_not_reverse_lookup=, #do_not_reverse_lookup=, for_fd, #getpeereid, #getpeername, #getsockname, #getsockopt, #local_address, #read_nonblock, #recv, #recv_nonblock, #recvmsg, #recvmsg_nonblock, #remote_address, #send, #sendmsg, #sendmsg_nonblock, #setsockopt, #shutdown, #write_nonblock

Constructor Details

#new(remote_host, remote_port, local_host = nil, local_port = nil, connect_timeout: nil) ⇒ Object

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.

:connect_timeout

specify the timeout in seconds.

[View source]

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'tcpsocket.c', line 23

static VALUE
tcp_init(int argc, VALUE *argv, VALUE sock)
{
    VALUE remote_host, remote_serv;
    VALUE local_host, local_serv;
    VALUE opt;
    static ID keyword_ids[2];
    VALUE kwargs[2];
    VALUE resolv_timeout = Qnil;
    VALUE connect_timeout = Qnil;

    if (!keyword_ids[0]) {
	CONST_ID(keyword_ids[0], "resolv_timeout");
	CONST_ID(keyword_ids[1], "connect_timeout");
    }

    rb_scan_args(argc, argv, "22:", &remote_host, &remote_serv,
			&local_host, &local_serv, &opt);

    if (!NIL_P(opt)) {
	rb_get_kwargs(opt, keyword_ids, 0, 2, kwargs);
	if (kwargs[0] != Qundef) { resolv_timeout = kwargs[0]; }
	if (kwargs[1] != Qundef) { connect_timeout = kwargs[1]; }
    }

    return rsock_init_inetsock(sock, remote_host, remote_serv,
			       local_host, local_serv, INET_CLIENT,
			       resolv_timeout, connect_timeout);
}

Class Method Details

.gethostbyname(hostname) ⇒ Array

Use Addrinfo.getaddrinfo instead. This method is deprecated for the following reasons:

  • The 3rd element of the result is the address family of the first address. The address families of the rest of the addresses are not returned.

  • gethostbyname() may take a long time and it may block other threads. (GVL cannot be released since gethostbyname() is not thread safe.)

  • This method uses gethostbyname() function already removed from POSIX.

This method lookups host information by hostname.

TCPSocket.gethostbyname("localhost")
#=> ["localhost", ["hal"], 2, "127.0.0.1"]

Returns:

  • (Array)
[View source]

78
79
80
81
82
83
84
85
# File 'tcpsocket.c', line 78

static VALUE
tcp_s_gethostbyname(VALUE obj, VALUE host)
{
    rb_warn("TCPSocket.gethostbyname is deprecated; use Addrinfo.getaddrinfo instead.");
    struct rb_addrinfo *res =
	rsock_addrinfo(host, Qnil, AF_UNSPEC, SOCK_STREAM, AI_CANONNAME);
    return rsock_make_hostent(host, res, tcp_sockaddr);
}