123456789_123456789_123456789_123456789_123456789_

Class: SOCKSSocket

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: TCPSocket
Defined in: ext/socket/sockssocket.c

Overview

SOCKS is an Internet protocol that routes packets between a client and a server through a proxy server. SOCKS5, if supported, additionally provides authentication so only authorized users may access a server.

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

::TCPSocket - Inherited

.gethostbyname
.new

Opens a TCP connection to remote_host on remote_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

  • #close

    Closes the SOCKS connection.

::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(host, port) ⇒ socket

Opens a SOCKS connection to host via the SOCKS server.

The SOCKS server configuration varies by implementation

When using the Dante libsocks/libsocksd implementation it is configured as SOCKS_SERVER env var.

See: manpages.debian.org/testing/dante-client/socksify.1.en.html for full env variable support.

[ GitHub ]

  
# File 'ext/socket/sockssocket.c', line 27

static VALUE
socks_init(VALUE sock, VALUE host, VALUE port)
{
    static int init = 0;

    if (init == 0) {
        SOCKSinit("ruby");
        init = 1;
    }

    return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil, Qnil, Qfalse, Qnil);
}

Instance Method Details

#close

Closes the SOCKS connection.

[ GitHub ]

  
# File 'ext/socket/sockssocket.c', line 45

static VALUE
socks_s_close(VALUE sock)
{
    rb_io_t *fptr;

    GetOpenFile(sock, fptr);
    shutdown(fptr->fd, SHUT_RDWR);
    return rb_io_close(sock);
}