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
-
.gethostbyname(hostname) ⇒ Array, ...
Use Addrinfo.getaddrinfo instead.
-
.new(remote_host, remote_port, local_host = nil, local_port = nil, connect_timeout: nil)
constructor
Opens a TCP connection to
remote_hostonremote_port.
::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 |
| #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 |
| #recv | Receives a message. |
| #recv_nonblock | Receives up to maxlen bytes from |
| #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 |
| #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.
# 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"]
# 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);
}