setsockopt(p1, p2, p3) public

Sets a socket option. These are protocol and system specific, see your local system documentation for details.

Parameters

  • level is an integer, usually one of the SOL_ constants such as

Socket::SOL_SOCKET, or a protocol level.
A string or symbol of the name, possibly without prefix, is also
accepted.
  • optname is an integer, usually one of the SO_ constants, such

as Socket::SO_REUSEADDR.
A string or symbol of the name, possibly without prefix, is also
accepted.
  • optval is the value of the option, it is passed to the underlying

setsockopt() as a pointer to a certain number of bytes. How this is
done depends on the type:
- Fixnum: value is assigned to an int, and a pointer to the int is
  passed, with length of sizeof(int).
- true or false: 1 or 0 (respectively) is assigned to an int, and the
  int is passed as for a Fixnum. Note that +false+ must be passed,
  not +nil+.
- String: the string's data and length is passed to the socket.

Examples

Some socket options are integers with boolean values, in this case #setsockopt could be called like this:

sock.setsockopt(:SOCKET, :REUSEADDR, true)
sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
sock.setsockopt(Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true))

Some socket options are integers with numeric values, in this case #setsockopt could be called like this:

sock.setsockopt(:IP, :TTL, 255)
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255)
sock.setsockopt(Socket::Option.int(:INET, :IP, :TTL, 255))

Option values may be structs. Passing them can be complex as it involves examining your system headers to determine the correct definition. An example is an ip_mreq, which may be defined in your system headers as:

struct ip_mreq {
  struct  in_addr imr_multiaddr;
  struct  in_addr imr_interface;
};

In this case #setsockopt could be called like this:

optval = IPAddr.new("224.0.0.251").hton +
         IPAddr.new(Socket::INADDR_ANY, Socket::AF_INET).hton
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, optval)
Show source
Register or log in to add new notes.