123456789_123456789_123456789_123456789_123456789_

Class: TCPSocket

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: IPSocket
Defined in: ext/socket/tcpsocket.c

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

Class Attribute Summary

::BasicSocket - Inherited

.do_not_reverse_lookup

Gets the global do_not_reverse_lookup flag.

.do_not_reverse_lookup=

Sets the global do_not_reverse_lookup flag.

Class Method Summary

::IPSocket - Inherited

.getaddress

Lookups the IP address of host.

::BasicSocket - Inherited

.for_fd

Returns a socket object which contains the file descriptor, fd.

Instance Attribute Summary

::BasicSocket - Inherited

#do_not_reverse_lookup

Gets the do_not_reverse_lookup flag of basicsocket.

#do_not_reverse_lookup=

Sets the do_not_reverse_lookup flag of basicsocket.

Instance Method Summary

::IPSocket - Inherited

#addr

Returns the local address as an array which contains address_family, port, hostname and numeric_address.

#inspect

Return a string describing this ::IPSocket object.

#peeraddr

Returns the remote address as an array which contains address_family, port, hostname and numeric_address.

#recvfrom

Receives a message and return the message as a string and an address which the message come from.

::BasicSocket - Inherited

#close_read

Disallows further read using shutdown system call.

#close_write

Disallows further write using shutdown system call.

#connect_address

Returns an address of the socket suitable for connect in the local machine.

#getpeereid

Returns the user and group on the peer of the UNIX socket.

#getpeername

Returns the remote address of the socket as a sockaddr string.

#getsockname

Returns the local address of the socket as a sockaddr string.

#getsockopt

Gets a socket option.

#local_address

Returns an ::Addrinfo object for local address obtained by getsockname.

#recv

Receives a message.

#recv_nonblock

Receives up to maxlen bytes from socket using recvfrom(2) after O_NONBLOCK is set for the underlying file descriptor.

#recvmsg

recvmsg receives a message using recvmsg(2) system call in blocking manner.

#recvmsg_nonblock

recvmsg receives a message using recvmsg(2) system call in non-blocking manner.

#remote_address

Returns an ::Addrinfo object for remote address obtained by getpeername.

#send

send mesg via basicsocket.

#sendmsg

sendmsg sends a message using sendmsg(2) system call in blocking manner.

#sendmsg_nonblock

sendmsg_nonblock sends a message using sendmsg(2) system call in non-blocking manner.

#setsockopt

Sets a socket option.

#shutdown

Calls shutdown(2) system call.

#__recvmsg, #__recvmsg_nonblock, #__sendmsg, #__sendmsg_nonblock, #read_nonblock, #write_nonblock, #__read_nonblock, #__recv_nonblock, #__write_nonblock

Constructor Details

.new(remote_host, remote_port, local_host = nil, local_port = nil, connect_timeout: 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.

:connect_timeout

specify the timeout in seconds.

[ GitHub ]

  
# File 'ext/socket/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"]
[ GitHub ]

  
# File 'ext/socket/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);
}