File: //usr/lib/ruby/gems/3.2.0/gems/rbs-2.8.2/stdlib/socket/0/socket.rbs
# <!-- rdoc-file=ext/socket/socket.c -->
# Class `Socket` provides access to the underlying operating system socket
# implementations. It can be used to provide more operating system specific
# functionality than the protocol-specific socket classes.
#
# The constants defined under Socket::Constants are also defined under Socket.
# For example, Socket::AF_INET is usable as well as Socket::Constants::AF_INET.
# See Socket::Constants for the list of constants.
#
# ### What's a socket?
#
# Sockets are endpoints of a bidirectional communication channel. Sockets can
# communicate within a process, between processes on the same machine or between
# different machines. There are many types of socket: TCPSocket, UDPSocket or
# UNIXSocket for example.
#
# Sockets have their own vocabulary:
#
# **domain:** The family of protocols:
# * Socket::PF_INET
# * Socket::PF_INET6
# * Socket::PF_UNIX
# * etc.
#
#
# **type:** The type of communications between the two endpoints, typically
# * Socket::SOCK_STREAM
# * Socket::SOCK_DGRAM.
#
#
# **protocol:** Typically *zero*. This may be used to identify a variant of a
# protocol.
#
# **hostname:** The identifier of a network interface:
# * a string (hostname, IPv4 or IPv6 address or `broadcast` which specifies a
# broadcast address)
# * a zero-length string which specifies INADDR_ANY
# * an integer (interpreted as binary address in host byte order).
#
#
# ### Quick start
#
# Many of the classes, such as TCPSocket, UDPSocket or UNIXSocket, ease the use
# of sockets comparatively to the equivalent C programming interface.
#
# Let's create an internet socket using the IPv4 protocol in a C-like manner:
#
# require 'socket'
#
# s = Socket.new Socket::AF_INET, Socket::SOCK_STREAM
# s.connect Socket.pack_sockaddr_in(80, 'example.com')
#
# You could also use the TCPSocket class:
#
# s = TCPSocket.new 'example.com', 80
#
# A simple server might look like this:
#
# require 'socket'
#
# server = TCPServer.new 2000 # Server bound to port 2000
#
# loop do
# client = server.accept # Wait for a client to connect
# client.puts "Hello !"
# client.puts "Time is #{Time.now}"
# client.close
# end
#
# A simple client may look like this:
#
# 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
#
# ### Exception Handling
#
# Ruby's Socket implementation raises exceptions based on the error generated by
# the system dependent implementation. This is why the methods are documented
# in a way that isolate Unix-based system exceptions from Windows based
# exceptions. If more information on a particular exception is needed, please
# refer to the Unix manual pages or the Windows WinSock reference.
#
# ### Convenience methods
#
# Although the general way to create socket is Socket.new, there are several
# methods of socket creation for most cases.
#
# TCP client socket
# : Socket.tcp, TCPSocket.open
# TCP server socket
# : Socket.tcp_server_loop, TCPServer.open
# UNIX client socket
# : Socket.unix, UNIXSocket.open
# UNIX server socket
# : Socket.unix_server_loop, UNIXServer.open
#
#
# ### Documentation by
#
# * Zach Dennis
# * Sam Roberts
# * *Programming Ruby* from The Pragmatic Bookshelf.
#
#
# Much material in this documentation is taken with permission from *Programming
# Ruby* from The Pragmatic Bookshelf.
#
class Socket < BasicSocket
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - accept_loop(*sockets) { |socket, client_addrinfo| ... }
# -->
# yield socket and client address for each a connection accepted via given
# sockets.
#
# The arguments are a list of sockets. The individual argument should be a
# socket or an array of sockets.
#
# This method yields the block sequentially. It means that the next connection
# is not accepted until the block returns. So concurrent mechanism, thread for
# example, should be used to service multiple clients at a time.
#
def self.accept_loop: (*_ToIO sockets) { (Socket) -> void } -> void
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.getaddrinfo(nodename, servname[, family[, socktype[, protocol[, flags[, reverse_lookup]]]]]) => array
# -->
# Obtains address information for *nodename*:*servname*.
#
# Note that Addrinfo.getaddrinfo provides the same functionality in an object
# oriented style.
#
# *family* should be an address family such as: :INET, :INET6, etc.
#
# *socktype* should be a socket type such as: :STREAM, :DGRAM, :RAW, etc.
#
# *protocol* should be a protocol defined in the family, and defaults to 0 for
# the family.
#
# *flags* should be bitwise OR of Socket::AI_* constants.
#
# Socket.getaddrinfo("www.ruby-lang.org", "http", nil, :STREAM)
# #=> [["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 1, 6]] # PF_INET/SOCK_STREAM/IPPROTO_TCP
#
# Socket.getaddrinfo("localhost", nil)
# #=> [["AF_INET", 0, "localhost", "127.0.0.1", 2, 1, 6], # PF_INET/SOCK_STREAM/IPPROTO_TCP
# # ["AF_INET", 0, "localhost", "127.0.0.1", 2, 2, 17], # PF_INET/SOCK_DGRAM/IPPROTO_UDP
# # ["AF_INET", 0, "localhost", "127.0.0.1", 2, 3, 0]] # PF_INET/SOCK_RAW/IPPROTO_IP
#
# *reverse_lookup* directs the form of the third element, and has to be one of
# below. If *reverse_lookup* is omitted, the default value is `nil`.
#
# +true+, +:hostname+: hostname is obtained from numeric address using reverse lookup, which may take a time.
# +false+, +:numeric+: hostname is the same as numeric address.
# +nil+: obey to the current +do_not_reverse_lookup+ flag.
#
# If Addrinfo object is preferred, use Addrinfo.getaddrinfo.
#
def self.getaddrinfo: (String peer, String | Integer | nil protocol, ?Integer | Symbol | nil family, ?Integer | Symbol | nil socktype, ?Integer | Symbol | nil protocol, ?Integer | nil flags) -> [ String, Integer, String, String, Integer, Integer, Integer ]
| (String? peer, String | Integer protocol, ?Integer | Symbol | nil family, ?Integer | Symbol | nil socktype, ?Integer | Symbol | nil protocol, ?Integer | nil flags) -> [ String, Integer, String, String, Integer, Integer, Integer ]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.gethostbyaddr(address_string [, address_family]) => hostent
# -->
# Use Addrinfo#getnameinfo instead. This method is deprecated for the following
# reasons:
#
# * Uncommon address representation: 4/16-bytes binary string to represent
# IPv4/IPv6 address.
# * gethostbyaddr() 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 obtains the host information for *address*.
#
# p Socket.gethostbyaddr([221,186,184,68].pack("CCCC"))
# #=> ["carbon.ruby-lang.org", [], 2, "\xDD\xBA\xB8D"]
#
# p Socket.gethostbyaddr([127,0,0,1].pack("CCCC"))
# ["localhost", [], 2, "\x7F\x00\x00\x01"]
# p Socket.gethostbyaddr(([0]*15+[1]).pack("C"*16))
# #=> ["localhost", ["ip6-localhost", "ip6-loopback"], 10,
# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"]
#
def self.gethostbyaddr: (String ip) -> [ String, Array[String], Integer, String ]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.gethostbyname(hostname) => [official_hostname, alias_hostnames, address_family, *address_list]
# -->
# 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.
# * Uncommon address representation: 4/16-bytes binary string to represent
# IPv4/IPv6 address.
# * 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 obtains the host information for *hostname*.
#
# p Socket.gethostbyname("hal") #=> ["localhost", ["hal"], 2, "\x7F\x00\x00\x01"]
#
def self.gethostbyname: (String name) -> [ String, Array[String], Integer, String ]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.gethostname => hostname
# -->
# Returns the hostname.
#
# p Socket.gethostname #=> "hal"
#
# Note that it is not guaranteed to be able to convert to IP address using
# gethostbyname, getaddrinfo, etc. If you need local IP address, use
# Socket.ip_address_list.
#
def self.gethostname: () -> String
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - Socket.getifaddrs => [ifaddr1, ...]
# -->
# Returns an array of interface addresses. An element of the array is an
# instance of Socket::Ifaddr.
#
# This method can be used to find multicast-enabled interfaces:
#
# pp Socket.getifaddrs.reject {|ifaddr|
# !ifaddr.addr.ip? || (ifaddr.flags & Socket::IFF_MULTICAST == 0)
# }.map {|ifaddr| [ifaddr.name, ifaddr.ifindex, ifaddr.addr] }
# #=> [["eth0", 2, #<Addrinfo: 221.186.184.67>],
# # ["eth0", 2, #<Addrinfo: fe80::216:3eff:fe95:88bb%eth0>]]
#
# Example result on GNU/Linux:
# pp Socket.getifaddrs
# #=> [#<Socket::Ifaddr lo UP,LOOPBACK,RUNNING,0x10000 PACKET[protocol=0 lo hatype=772 HOST hwaddr=00:00:00:00:00:00]>,
# # #<Socket::Ifaddr eth0 UP,BROADCAST,RUNNING,MULTICAST,0x10000 PACKET[protocol=0 eth0 hatype=1 HOST hwaddr=00:16:3e:95:88:bb] broadcast=PACKET[protocol=0 eth0 hatype=1 HOST hwaddr=ff:ff:ff:ff:ff:ff]>,
# # #<Socket::Ifaddr sit0 NOARP PACKET[protocol=0 sit0 hatype=776 HOST hwaddr=00:00:00:00]>,
# # #<Socket::Ifaddr lo UP,LOOPBACK,RUNNING,0x10000 127.0.0.1 netmask=255.0.0.0>,
# # #<Socket::Ifaddr eth0 UP,BROADCAST,RUNNING,MULTICAST,0x10000 221.186.184.67 netmask=255.255.255.240 broadcast=221.186.184.79>,
# # #<Socket::Ifaddr lo UP,LOOPBACK,RUNNING,0x10000 ::1 netmask=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
# # #<Socket::Ifaddr eth0 UP,BROADCAST,RUNNING,MULTICAST,0x10000 fe80::216:3eff:fe95:88bb%eth0 netmask=ffff:ffff:ffff:ffff::>]
#
# Example result on FreeBSD:
# pp Socket.getifaddrs
# #=> [#<Socket::Ifaddr usbus0 UP,0x10000 LINK[usbus0]>,
# # #<Socket::Ifaddr re0 UP,BROADCAST,RUNNING,MULTICAST,0x800 LINK[re0 3a:d0:40:9a:fe:e8]>,
# # #<Socket::Ifaddr re0 UP,BROADCAST,RUNNING,MULTICAST,0x800 10.250.10.18 netmask=255.255.255.? (7 bytes for 16 bytes sockaddr_in) broadcast=10.250.10.255>,
# # #<Socket::Ifaddr re0 UP,BROADCAST,RUNNING,MULTICAST,0x800 fe80:2::38d0:40ff:fe9a:fee8 netmask=ffff:ffff:ffff:ffff::>,
# # #<Socket::Ifaddr re0 UP,BROADCAST,RUNNING,MULTICAST,0x800 2001:2e8:408:10::12 netmask=UNSPEC>,
# # #<Socket::Ifaddr plip0 POINTOPOINT,MULTICAST,0x800 LINK[plip0]>,
# # #<Socket::Ifaddr lo0 UP,LOOPBACK,RUNNING,MULTICAST LINK[lo0]>,
# # #<Socket::Ifaddr lo0 UP,LOOPBACK,RUNNING,MULTICAST ::1 netmask=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
# # #<Socket::Ifaddr lo0 UP,LOOPBACK,RUNNING,MULTICAST fe80:4::1 netmask=ffff:ffff:ffff:ffff::>,
# # #<Socket::Ifaddr lo0 UP,LOOPBACK,RUNNING,MULTICAST 127.0.0.1 netmask=255.?.?.? (5 bytes for 16 bytes sockaddr_in)>]
#
def self.getifaddrs: () -> Array[Socket::Ifaddr]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.getnameinfo(sockaddr [, flags]) => [hostname, servicename]
# -->
# Obtains name information for *sockaddr*.
#
# *sockaddr* should be one of follows.
# * packed sockaddr string such as Socket.sockaddr_in(80, "127.0.0.1")
# * 3-elements array such as ["AF_INET", 80, "127.0.0.1"]
# * 4-elements array such as ["AF_INET", 80, ignored, "127.0.0.1"]
#
#
# *flags* should be bitwise OR of Socket::NI_* constants.
#
# Note: The last form is compatible with IPSocket#addr and IPSocket#peeraddr.
#
# Socket.getnameinfo(Socket.sockaddr_in(80, "127.0.0.1")) #=> ["localhost", "www"]
# Socket.getnameinfo(["AF_INET", 80, "127.0.0.1"]) #=> ["localhost", "www"]
# Socket.getnameinfo(["AF_INET", 80, "localhost", "127.0.0.1"]) #=> ["localhost", "www"]
#
# If Addrinfo object is preferred, use Addrinfo#getnameinfo.
#
def self.getnameinfo: ([ String, Integer, String ]) -> Array[String]
| ([ String, Integer, String, String ]) -> Array[String]
| (String sockaddr) -> Array[String]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.getservbyname(service_name) => port_number
# - Socket.getservbyname(service_name, protocol_name) => port_number
# -->
# Obtains the port number for *service_name*.
#
# If *protocol_name* is not given, "tcp" is assumed.
#
# Socket.getservbyname("smtp") #=> 25
# Socket.getservbyname("shell") #=> 514
# Socket.getservbyname("syslog", "udp") #=> 514
#
def self.getservbyname: (String service_proto) -> Integer
| (String service_proto, String layer4_proto) -> Integer
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.getservbyport(port [, protocol_name]) => service
# -->
# Obtains the port number for *port*.
#
# If *protocol_name* is not given, "tcp" is assumed.
#
# Socket.getservbyport(80) #=> "www"
# Socket.getservbyport(514, "tcp") #=> "shell"
# Socket.getservbyport(514, "udp") #=> "syslog"
#
def self.getservbyport: (Integer service_port) -> String
| (Integer service_port, String layer4_proto) -> String
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.ip_address_list => array
# -->
# Returns local IP addresses as an array.
#
# The array contains Addrinfo objects.
#
# pp Socket.ip_address_list
# #=> [#<Addrinfo: 127.0.0.1>,
# #<Addrinfo: 192.168.0.128>,
# #<Addrinfo: ::1>,
# ...]
#
def self.ip_address_list: () -> Array[Addrinfo]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.sockaddr_in(port, host) => sockaddr
# - Socket.pack_sockaddr_in(port, host) => sockaddr
# -->
# Packs *port* and *host* as an AF_INET/AF_INET6 sockaddr string.
#
# Socket.sockaddr_in(80, "127.0.0.1")
# #=> "\x02\x00\x00P\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
#
# Socket.sockaddr_in(80, "::1")
# #=> "\n\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00"
#
def self.pack_sockaddr_in: (Integer port, String ip) -> String
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.sockaddr_un(path) => sockaddr
# - Socket.pack_sockaddr_un(path) => sockaddr
# -->
# Packs *path* as an AF_UNIX sockaddr string.
#
# Socket.sockaddr_un("/tmp/sock") #=> "\x01\x00/tmp/sock\x00\x00..."
#
def self.pack_sockaddr_un: (String sockpath) -> String
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.pair(domain, type, protocol) => [socket1, socket2]
# - Socket.socketpair(domain, type, protocol) => [socket1, socket2]
# -->
# Creates a pair of sockets connected each other.
#
# *domain* should be a communications domain such as: :INET, :INET6, :UNIX, etc.
#
# *socktype* should be a socket type such as: :STREAM, :DGRAM, :RAW, etc.
#
# *protocol* should be a protocol defined in the domain, defaults to 0 for the
# domain.
#
# s1, s2 = Socket.pair(:UNIX, :STREAM, 0)
# s1.send "a", 0
# s1.send "b", 0
# s1.close
# p s2.recv(10) #=> "ab"
# p s2.recv(10) #=> ""
# p s2.recv(10) #=> ""
#
# s1, s2 = Socket.pair(:UNIX, :DGRAM, 0)
# s1.send "a", 0
# s1.send "b", 0
# p s2.recv(10) #=> "a"
# p s2.recv(10) #=> "b"
#
def self.pair: (Symbol sockdomain, Symbol socktype, Integer protocol) -> [ instance, instance ]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.sockaddr_in(port, host) => sockaddr
# - Socket.pack_sockaddr_in(port, host) => sockaddr
# -->
# Packs *port* and *host* as an AF_INET/AF_INET6 sockaddr string.
#
# Socket.sockaddr_in(80, "127.0.0.1")
# #=> "\x02\x00\x00P\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
#
# Socket.sockaddr_in(80, "::1")
# #=> "\n\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00"
#
def self.sockaddr_in: (Integer port, String ip) -> String
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.sockaddr_un(path) => sockaddr
# - Socket.pack_sockaddr_un(path) => sockaddr
# -->
# Packs *path* as an AF_UNIX sockaddr string.
#
# Socket.sockaddr_un("/tmp/sock") #=> "\x01\x00/tmp/sock\x00\x00..."
#
def self.sockaddr_un: (String sockpath) -> String
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.pair(domain, type, protocol) => [socket1, socket2]
# - Socket.socketpair(domain, type, protocol) => [socket1, socket2]
# -->
# Creates a pair of sockets connected each other.
#
# *domain* should be a communications domain such as: :INET, :INET6, :UNIX, etc.
#
# *socktype* should be a socket type such as: :STREAM, :DGRAM, :RAW, etc.
#
# *protocol* should be a protocol defined in the domain, defaults to 0 for the
# domain.
#
# s1, s2 = Socket.pair(:UNIX, :STREAM, 0)
# s1.send "a", 0
# s1.send "b", 0
# s1.close
# p s2.recv(10) #=> "ab"
# p s2.recv(10) #=> ""
# p s2.recv(10) #=> ""
#
# s1, s2 = Socket.pair(:UNIX, :DGRAM, 0)
# s1.send "a", 0
# s1.send "b", 0
# p s2.recv(10) #=> "a"
# p s2.recv(10) #=> "b"
#
def self.socketpair: (Symbol sockdomain, Symbol socktype, Integer protocol) -> [ instance, instance ]
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - Socket.tcp(host, port, local_host=nil, local_port=nil, [opts]) {|socket| ... }
# - Socket.tcp(host, port, local_host=nil, local_port=nil, [opts])
# -->
# creates a new socket object connected to host:port using TCP/IP.
#
# If local_host:local_port is given, the socket is bound to it.
#
# The optional last argument *opts* is options represented by a hash. *opts* may
# have following options:
#
# :connect_timeout
# : specify the timeout in seconds.
# :resolv_timeout
# : specify the name resolution timeout in seconds.
#
#
# If a block is given, the block is called with the socket. The value of the
# block is returned. The socket is closed when this method returns.
#
# If no block is given, the socket is returned.
#
# Socket.tcp("www.ruby-lang.org", 80) {|sock|
# sock.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
# sock.close_write
# puts sock.read
# }
#
def self.tcp: (String host, Integer port, ?String local_host, ?Integer local_port, ?resolv_timeout: Numeric, ?connect_timeout: Numeric) -> instance
| (String host, Integer port, ?String local_host, ?Integer local_port, ?resolv_timeout: Numeric, ?connect_timeout: Numeric) { (instance) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - tcp_server_loop(host=nil, port) { |socket, client_addrinfo| ... }
# -->
# creates a TCP/IP server on *port* and calls the block for each connection
# accepted. The block is called with a socket and a client_address as an
# Addrinfo object.
#
# If *host* is specified, it is used with *port* to determine the server
# addresses.
#
# The socket is **not** closed when the block returns. So application should
# close it explicitly.
#
# This method calls the block sequentially. It means that the next connection is
# not accepted until the block returns. So concurrent mechanism, thread for
# example, should be used to service multiple clients at a time.
#
# Note that Addrinfo.getaddrinfo is used to determine the server socket
# addresses. When Addrinfo.getaddrinfo returns two or more addresses, IPv4 and
# IPv6 address for example, all of them are used. Socket.tcp_server_loop
# succeeds if one socket can be used at least.
#
# # Sequential echo server.
# # It services only one client at a time.
# Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
# begin
# IO.copy_stream(sock, sock)
# ensure
# sock.close
# end
# }
#
# # Threaded echo server
# # It services multiple clients at a time.
# # Note that it may accept connections too much.
# Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
# Thread.new {
# begin
# IO.copy_stream(sock, sock)
# ensure
# sock.close
# end
# }
# }
#
def self.tcp_server_loop: (?String host, Integer port) { (instance, Addrinfo) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - tcp_server_sockets(host=nil, port) { |sockets| ... }
# -->
# creates TCP/IP server sockets for *host* and *port*. *host* is optional.
#
# If no block given, it returns an array of listening sockets.
#
# If a block is given, the block is called with the sockets. The value of the
# block is returned. The socket is closed when this method returns.
#
# If *port* is 0, actual port number is chosen dynamically. However all sockets
# in the result has same port number.
#
# # tcp_server_sockets returns two sockets.
# sockets = Socket.tcp_server_sockets(1296)
# p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]
#
# # The sockets contains IPv6 and IPv4 sockets.
# sockets.each {|s| p s.local_address }
# #=> #<Addrinfo: [::]:1296 TCP>
# # #<Addrinfo: 0.0.0.0:1296 TCP>
#
# # IPv6 and IPv4 socket has same port number, 53114, even if it is chosen dynamically.
# sockets = Socket.tcp_server_sockets(0)
# sockets.each {|s| p s.local_address }
# #=> #<Addrinfo: [::]:53114 TCP>
# # #<Addrinfo: 0.0.0.0:53114 TCP>
#
# # The block is called with the sockets.
# Socket.tcp_server_sockets(0) {|sockets|
# p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]
# }
#
def self.tcp_server_sockets: (?String host, Integer port) -> Array[TCPServer]
| (?String host, Integer port) { (Array[TCPServer]) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - Socket.udp_server_loop(port) {|msg, msg_src| ... }
# - Socket.udp_server_loop(host, port) {|msg, msg_src| ... }
# -->
# creates a UDP/IP server on *port* and calls the block for each message
# arrived. The block is called with the message and its source information.
#
# This method allocates sockets internally using *port*. If *host* is specified,
# it is used conjunction with *port* to determine the server addresses.
#
# The *msg* is a string.
#
# The *msg_src* is a Socket::UDPSource object. It is used for reply.
#
# # UDP/IP echo server.
# Socket.udp_server_loop(9261) {|msg, msg_src|
# msg_src.reply msg
# }
#
def self.udp_server_loop: (?String host, Integer port) { (String, Socket::UDPSource) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - Socket.udp_server_loop_on(sockets) {|msg, msg_src| ... }
# -->
# Run UDP/IP server loop on the given sockets.
#
# The return value of Socket.udp_server_sockets is appropriate for the argument.
#
# It calls the block for each message received.
#
def self.udp_server_loop_on: (UDPSocket sockets) { (String, Socket::UDPSource) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - Socket.udp_server_recv(sockets) {|msg, msg_src| ... }
# -->
# Receive UDP/IP packets from the given *sockets*. For each packet received, the
# block is called.
#
# The block receives *msg* and *msg_src*. *msg* is a string which is the payload
# of the received packet. *msg_src* is a Socket::UDPSource object which is used
# for reply.
#
# Socket.udp_server_loop can be implemented using this method as follows.
#
# udp_server_sockets(host, port) {|sockets|
# loop {
# readable, _, _ = IO.select(sockets)
# udp_server_recv(readable) {|msg, msg_src| ... }
# }
# }
#
def self.udp_server_recv: (Array[UDPSocket] sockets) { (String, Socket::UDPSource) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - Socket.udp_server_sockets([host, ] port)
# -->
# Creates UDP/IP sockets for a UDP server.
#
# If no block given, it returns an array of sockets.
#
# If a block is given, the block is called with the sockets. The value of the
# block is returned. The sockets are closed when this method returns.
#
# If *port* is zero, some port is chosen. But the chosen port is used for the
# all sockets.
#
# # UDP/IP echo server
# Socket.udp_server_sockets(0) {|sockets|
# p sockets.first.local_address.ip_port #=> 32963
# Socket.udp_server_loop_on(sockets) {|msg, msg_src|
# msg_src.reply msg
# }
# }
#
def self.udp_server_sockets: (?String host, Integer port) { (UDPSocket) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - unix(path) { |socket| ... }
# -->
# creates a new socket connected to path using UNIX socket socket.
#
# If a block is given, the block is called with the socket. The value of the
# block is returned. The socket is closed when this method returns.
#
# If no block is given, the socket is returned.
#
# # talk to /tmp/sock socket.
# Socket.unix("/tmp/sock") {|sock|
# t = Thread.new { IO.copy_stream(sock, STDOUT) }
# IO.copy_stream(STDIN, sock)
# t.join
# }
#
def self.unix: (String path) -> UNIXSocket
| (String path) { (UNIXSocket) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - unix_server_loop(path) { |socket, client_addrinfo| ... }
# -->
# creates a UNIX socket server on *path*. It calls the block for each socket
# accepted.
#
# If *host* is specified, it is used with *port* to determine the server ports.
#
# The socket is **not** closed when the block returns. So application should
# close it.
#
# This method deletes the socket file pointed by *path* at first if the file is
# a socket file and it is owned by the user of the application. This is safe
# only if the directory of *path* is not changed by a malicious user. So don't
# use /tmp/malicious-users-directory/socket. Note that /tmp/socket and
# /tmp/your-private-directory/socket is safe assuming that /tmp has sticky bit.
#
# # Sequential echo server.
# # It services only one client at a time.
# Socket.unix_server_loop("/tmp/sock") {|sock, client_addrinfo|
# begin
# IO.copy_stream(sock, sock)
# ensure
# sock.close
# end
# }
#
def self.unix_server_loop: (String path) { (UNIXSocket, Addrinfo) -> void } -> void
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - unix_server_socket(path) { |s| ... }
# -->
# creates a UNIX server socket on *path*
#
# If no block given, it returns a listening socket.
#
# If a block is given, it is called with the socket and the block value is
# returned. When the block exits, the socket is closed and the socket file is
# removed.
#
# socket = Socket.unix_server_socket("/tmp/s")
# p socket #=> #<Socket:fd 3>
# p socket.local_address #=> #<Addrinfo: /tmp/s SOCK_STREAM>
#
# Socket.unix_server_socket("/tmp/sock") {|s|
# p s #=> #<Socket:fd 3>
# p s.local_address #=> # #<Addrinfo: /tmp/sock SOCK_STREAM>
# }
#
def self.unix_server_socket: (String path) -> Socket
| (String path) { (Socket) -> void } -> void
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.unpack_sockaddr_in(sockaddr) => [port, ip_address]
# -->
# Unpacks *sockaddr* into port and ip_address.
#
# *sockaddr* should be a string or an addrinfo for AF_INET/AF_INET6.
#
# sockaddr = Socket.sockaddr_in(80, "127.0.0.1")
# p sockaddr #=> "\x02\x00\x00P\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
# p Socket.unpack_sockaddr_in(sockaddr) #=> [80, "127.0.0.1"]
#
def self.unpack_sockaddr_in: (String | Addrinfo sockaddr) -> [ Integer, String ]
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.unpack_sockaddr_un(sockaddr) => path
# -->
# Unpacks *sockaddr* into path.
#
# *sockaddr* should be a string or an addrinfo for AF_UNIX.
#
# sockaddr = Socket.sockaddr_un("/tmp/sock")
# p Socket.unpack_sockaddr_un(sockaddr) #=> "/tmp/sock"
#
def self.unpack_sockaddr_un: (String path) -> String
public
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.accept => [client_socket, client_addrinfo]
# -->
# Accepts a next connection. Returns a new Socket object and Addrinfo object.
#
# serv = Socket.new(:INET, :STREAM, 0)
# serv.listen(5)
# c = Socket.new(:INET, :STREAM, 0)
# c.connect(serv.connect_address)
# p serv.accept #=> [#<Socket:fd 6>, #<Addrinfo: 127.0.0.1:48555 TCP>]
#
def accept: () -> [ Socket, Addrinfo ]
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - socket.accept_nonblock([options]) => [client_socket, client_addrinfo]
# -->
# Accepts an incoming connection using accept(2) after O_NONBLOCK is set for the
# underlying file descriptor. It returns an array containing the accepted socket
# for the incoming connection, *client_socket*, and an Addrinfo,
# *client_addrinfo*.
#
# ### Example
# # In one script, start this first
# require 'socket'
# include Socket::Constants
# socket = Socket.new(AF_INET, SOCK_STREAM, 0)
# sockaddr = Socket.sockaddr_in(2200, 'localhost')
# socket.bind(sockaddr)
# socket.listen(5)
# begin # emulate blocking accept
# client_socket, client_addrinfo = socket.accept_nonblock
# rescue IO::WaitReadable, Errno::EINTR
# IO.select([socket])
# retry
# end
# puts "The client said, '#{client_socket.readline.chomp}'"
# client_socket.puts "Hello from script one!"
# socket.close
#
# # In another script, start this second
# require 'socket'
# include Socket::Constants
# socket = Socket.new(AF_INET, SOCK_STREAM, 0)
# sockaddr = Socket.sockaddr_in(2200, 'localhost')
# socket.connect(sockaddr)
# socket.puts "Hello from script 2."
# puts "The server said, '#{socket.readline.chomp}'"
# socket.close
#
# Refer to Socket#accept for the exceptions that may be thrown if the call to
# *accept_nonblock* fails.
#
# Socket#accept_nonblock may raise any error corresponding to accept(2) failure,
# including Errno::EWOULDBLOCK.
#
# If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED or
# Errno::EPROTO, it is extended by IO::WaitReadable. So IO::WaitReadable can be
# used to rescue the exceptions for retrying accept_nonblock.
#
# By specifying a keyword argument *exception* to `false`, you can indicate that
# accept_nonblock should not raise an IO::WaitReadable exception, but return the
# symbol `:wait_readable` instead.
#
# ### See
# * Socket#accept
#
def accept_nonblock: (?exception: boolish) -> ([ Socket, Addrinfo ] | :wait_readable)
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.bind(local_sockaddr) => 0
# -->
# Binds to the given local address.
#
# ### Parameter
# * `local_sockaddr` - the `struct` sockaddr contained in a string or an
# Addrinfo object
#
#
# ### Example
# require 'socket'
#
# # use Addrinfo
# socket = Socket.new(:INET, :STREAM, 0)
# socket.bind(Addrinfo.tcp("127.0.0.1", 2222))
# p socket.local_address #=> #<Addrinfo: 127.0.0.1:2222 TCP>
#
# # use struct sockaddr
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.bind( sockaddr )
#
# ### Unix-based Exceptions
# On unix-based based systems the following system exceptions may be raised if
# the call to *bind* fails:
# * Errno::EACCES - the specified *sockaddr* is protected and the current user
# does not have permission to bind to it
# * Errno::EADDRINUSE - the specified *sockaddr* is already in use
# * Errno::EADDRNOTAVAIL - the specified *sockaddr* is not available from the
# local machine
# * Errno::EAFNOSUPPORT - the specified *sockaddr* is not a valid address for
# the family of the calling `socket`
# * Errno::EBADF - the *sockaddr* specified is not a valid file descriptor
# * Errno::EFAULT - the *sockaddr* argument cannot be accessed
# * Errno::EINVAL - the `socket` is already bound to an address, and the
# protocol does not support binding to the new *sockaddr* or the `socket`
# has been shut down.
# * Errno::EINVAL - the address length is not a valid length for the address
# family
# * Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded
# PATH_MAX
# * Errno::ENOBUFS - no buffer space is available
# * Errno::ENOSR - there were insufficient STREAMS resources available to
# complete the operation
# * Errno::ENOTSOCK - the `socket` does not refer to a socket
# * Errno::EOPNOTSUPP - the socket type of the `socket` does not support
# binding to an address
#
#
# On unix-based based systems if the address family of the calling `socket` is
# Socket::AF_UNIX the follow exceptions may be raised if the call to *bind*
# fails:
# * Errno::EACCES - search permission is denied for a component of the prefix
# path or write access to the `socket` is denied
# * Errno::EDESTADDRREQ - the *sockaddr* argument is a null pointer
# * Errno::EISDIR - same as Errno::EDESTADDRREQ
# * Errno::EIO - an i/o error occurred
# * Errno::ELOOP - too many symbolic links were encountered in translating the
# pathname in *sockaddr*
# * Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX
# characters, or an entire pathname exceeded PATH_MAX characters
# * Errno::ENOENT - a component of the pathname does not name an existing file
# or the pathname is an empty string
# * Errno::ENOTDIR - a component of the path prefix of the pathname in
# *sockaddr* is not a directory
# * Errno::EROFS - the name would reside on a read only filesystem
#
#
# ### Windows Exceptions
# On Windows systems the following system exceptions may be raised if the call
# to *bind* fails:
# * Errno::ENETDOWN-- the network is down
# * Errno::EACCES - the attempt to connect the datagram socket to the
# broadcast address failed
# * Errno::EADDRINUSE - the socket's local address is already in use
# * Errno::EADDRNOTAVAIL - the specified address is not a valid address for
# this computer
# * Errno::EFAULT - the socket's internal address or address length parameter
# is too small or is not a valid part of the user space addressed
# * Errno::EINVAL - the `socket` is already bound to an address
# * Errno::ENOBUFS - no buffer space is available
# * Errno::ENOTSOCK - the `socket` argument does not refer to a socket
#
#
# ### See
# * bind manual pages on unix-based systems
# * bind function in Microsoft's Winsock functions reference
#
def bind: (String | Addrinfo local_sockaddr) -> void
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.connect(remote_sockaddr) => 0
# -->
# Requests a connection to be made on the given `remote_sockaddr`. Returns 0 if
# successful, otherwise an exception is raised.
#
# ### Parameter
# * `remote_sockaddr` - the `struct` sockaddr contained in a string or
# Addrinfo object
#
#
# ### Example:
# # Pull down Google's web page
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' )
# socket.connect( sockaddr )
# socket.write( "GET / HTTP/1.0\r\n\r\n" )
# results = socket.read
#
# ### Unix-based Exceptions
# On unix-based systems the following system exceptions may be raised if the
# call to *connect* fails:
# * Errno::EACCES - search permission is denied for a component of the prefix
# path or write access to the `socket` is denied
# * Errno::EADDRINUSE - the *sockaddr* is already in use
# * Errno::EADDRNOTAVAIL - the specified *sockaddr* is not available from the
# local machine
# * Errno::EAFNOSUPPORT - the specified *sockaddr* is not a valid address for
# the address family of the specified `socket`
# * Errno::EALREADY - a connection is already in progress for the specified
# socket
# * Errno::EBADF - the `socket` is not a valid file descriptor
# * Errno::ECONNREFUSED - the target *sockaddr* was not listening for
# connections refused the connection request
# * Errno::ECONNRESET - the remote host reset the connection request
# * Errno::EFAULT - the *sockaddr* cannot be accessed
# * Errno::EHOSTUNREACH - the destination host cannot be reached (probably
# because the host is down or a remote router cannot reach it)
# * Errno::EINPROGRESS - the O_NONBLOCK is set for the `socket` and the
# connection cannot be immediately established; the connection will be
# established asynchronously
# * Errno::EINTR - the attempt to establish the connection was interrupted by
# delivery of a signal that was caught; the connection will be established
# asynchronously
# * Errno::EISCONN - the specified `socket` is already connected
# * Errno::EINVAL - the address length used for the *sockaddr* is not a valid
# length for the address family or there is an invalid family in *sockaddr*
# * Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded
# PATH_MAX
# * Errno::ENETDOWN - the local interface used to reach the destination is
# down
# * Errno::ENETUNREACH - no route to the network is present
# * Errno::ENOBUFS - no buffer space is available
# * Errno::ENOSR - there were insufficient STREAMS resources available to
# complete the operation
# * Errno::ENOTSOCK - the `socket` argument does not refer to a socket
# * Errno::EOPNOTSUPP - the calling `socket` is listening and cannot be
# connected
# * Errno::EPROTOTYPE - the *sockaddr* has a different type than the socket
# bound to the specified peer address
# * Errno::ETIMEDOUT - the attempt to connect timed out before a connection
# was made.
#
#
# On unix-based systems if the address family of the calling `socket` is AF_UNIX
# the follow exceptions may be raised if the call to *connect* fails:
# * Errno::EIO - an i/o error occurred while reading from or writing to the
# file system
# * Errno::ELOOP - too many symbolic links were encountered in translating the
# pathname in *sockaddr*
# * Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX
# characters, or an entire pathname exceeded PATH_MAX characters
# * Errno::ENOENT - a component of the pathname does not name an existing file
# or the pathname is an empty string
# * Errno::ENOTDIR - a component of the path prefix of the pathname in
# *sockaddr* is not a directory
#
#
# ### Windows Exceptions
# On Windows systems the following system exceptions may be raised if the call
# to *connect* fails:
# * Errno::ENETDOWN - the network is down
# * Errno::EADDRINUSE - the socket's local address is already in use
# * Errno::EINTR - the socket was cancelled
# * Errno::EINPROGRESS - a blocking socket is in progress or the service
# provider is still processing a callback function. Or a nonblocking connect
# call is in progress on the `socket`.
# * Errno::EALREADY - see Errno::EINVAL
# * Errno::EADDRNOTAVAIL - the remote address is not a valid address, such as
# ADDR_ANY TODO check ADDRANY TO INADDR_ANY
# * Errno::EAFNOSUPPORT - addresses in the specified family cannot be used
# with with this `socket`
# * Errno::ECONNREFUSED - the target *sockaddr* was not listening for
# connections refused the connection request
# * Errno::EFAULT - the socket's internal address or address length parameter
# is too small or is not a valid part of the user space address
# * Errno::EINVAL - the `socket` is a listening socket
# * Errno::EISCONN - the `socket` is already connected
# * Errno::ENETUNREACH - the network cannot be reached from this host at this
# time
# * Errno::EHOSTUNREACH - no route to the network is present
# * Errno::ENOBUFS - no buffer space is available
# * Errno::ENOTSOCK - the `socket` argument does not refer to a socket
# * Errno::ETIMEDOUT - the attempt to connect timed out before a connection
# was made.
# * Errno::EWOULDBLOCK - the socket is marked as nonblocking and the
# connection cannot be completed immediately
# * Errno::EACCES - the attempt to connect the datagram socket to the
# broadcast address failed
#
#
# ### See
# * connect manual pages on unix-based systems
# * connect function in Microsoft's Winsock functions reference
#
def connect: (String | Addrinfo remote_sockaddr) -> Integer
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - socket.connect_nonblock(remote_sockaddr, [options]) => 0
# -->
# Requests a connection to be made on the given `remote_sockaddr` after
# O_NONBLOCK is set for the underlying file descriptor. Returns 0 if successful,
# otherwise an exception is raised.
#
# ### Parameter
# # +remote_sockaddr+ - the +struct+ sockaddr contained in a string or Addrinfo object
#
# ### Example:
# # Pull down Google's web page
# require 'socket'
# include Socket::Constants
# socket = Socket.new(AF_INET, SOCK_STREAM, 0)
# sockaddr = Socket.sockaddr_in(80, 'www.google.com')
# begin # emulate blocking connect
# socket.connect_nonblock(sockaddr)
# rescue IO::WaitWritable
# IO.select(nil, [socket]) # wait 3-way handshake completion
# begin
# socket.connect_nonblock(sockaddr) # check connection failure
# rescue Errno::EISCONN
# end
# end
# socket.write("GET / HTTP/1.0\r\n\r\n")
# results = socket.read
#
# Refer to Socket#connect for the exceptions that may be thrown if the call to
# *connect_nonblock* fails.
#
# Socket#connect_nonblock may raise any error corresponding to connect(2)
# failure, including Errno::EINPROGRESS.
#
# If the exception is Errno::EINPROGRESS, it is extended by IO::WaitWritable. So
# IO::WaitWritable can be used to rescue the exceptions for retrying
# connect_nonblock.
#
# By specifying a keyword argument *exception* to `false`, you can indicate that
# connect_nonblock should not raise an IO::WaitWritable exception, but return
# the symbol `:wait_writable` instead.
#
# ### See
# # Socket#connect
#
def connect_nonblock: (untyped addr, ?exception: untyped) -> (Integer | :wait_writable)
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - ipv6only!()
# -->
# enable the socket option IPV6_V6ONLY if IPV6_V6ONLY is available.
#
def ipv6only!: () -> void
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.listen( int ) => 0
# -->
# Listens for connections, using the specified `int` as the backlog. A call to
# *listen* only applies if the `socket` is of type SOCK_STREAM or
# SOCK_SEQPACKET.
#
# ### Parameter
# * `backlog` - the maximum length of the queue for pending connections.
#
#
# ### Example 1
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.bind( sockaddr )
# socket.listen( 5 )
#
# ### Example 2 (listening on an arbitrary port, unix-based systems only):
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# socket.listen( 1 )
#
# ### Unix-based Exceptions
# On unix based systems the above will work because a new `sockaddr` struct is
# created on the address ADDR_ANY, for an arbitrary port number as handed off by
# the kernel. It will not work on Windows, because Windows requires that the
# `socket` is bound by calling *bind* before it can *listen*.
#
# If the *backlog* amount exceeds the implementation-dependent maximum queue
# length, the implementation's maximum queue length will be used.
#
# On unix-based based systems the following system exceptions may be raised if
# the call to *listen* fails:
# * Errno::EBADF - the *socket* argument is not a valid file descriptor
# * Errno::EDESTADDRREQ - the *socket* is not bound to a local address, and
# the protocol does not support listening on an unbound socket
# * Errno::EINVAL - the *socket* is already connected
# * Errno::ENOTSOCK - the *socket* argument does not refer to a socket
# * Errno::EOPNOTSUPP - the *socket* protocol does not support listen
# * Errno::EACCES - the calling process does not have appropriate privileges
# * Errno::EINVAL - the *socket* has been shut down
# * Errno::ENOBUFS - insufficient resources are available in the system to
# complete the call
#
#
# ### Windows Exceptions
# On Windows systems the following system exceptions may be raised if the call
# to *listen* fails:
# * Errno::ENETDOWN - the network is down
# * Errno::EADDRINUSE - the socket's local address is already in use. This
# usually occurs during the execution of *bind* but could be delayed if the
# call to *bind* was to a partially wildcard address (involving ADDR_ANY)
# and if a specific address needs to be committed at the time of the call to
# *listen*
# * Errno::EINPROGRESS - a Windows Sockets 1.1 call is in progress or the
# service provider is still processing a callback function
# * Errno::EINVAL - the `socket` has not been bound with a call to *bind*.
# * Errno::EISCONN - the `socket` is already connected
# * Errno::EMFILE - no more socket descriptors are available
# * Errno::ENOBUFS - no buffer space is available
# * Errno::ENOTSOC - `socket` is not a socket
# * Errno::EOPNOTSUPP - the referenced `socket` is not a type that supports
# the *listen* method
#
#
# ### See
# * listen manual pages on unix-based systems
# * listen function in Microsoft's Winsock functions reference
#
def listen: (Integer backlog_len) -> void
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.recvfrom(maxlen) => [mesg, sender_addrinfo]
# - socket.recvfrom(maxlen, flags) => [mesg, sender_addrinfo]
# -->
# Receives up to *maxlen* bytes from `socket`. *flags* is zero or more of the
# `MSG_` options. The first element of the results, *mesg*, is the data
# received. The second element, *sender_addrinfo*, contains protocol-specific
# address information of the sender.
#
# ### Parameters
# * `maxlen` - the maximum number of bytes to receive from the socket
# * `flags` - zero or more of the `MSG_` options
#
#
# ### Example
# # In one file, start this first
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.bind( sockaddr )
# socket.listen( 5 )
# client, client_addrinfo = socket.accept
# data = client.recvfrom( 20 )[0].chomp
# puts "I only received 20 bytes '#{data}'"
# sleep 1
# socket.close
#
# # In another file, start this second
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.connect( sockaddr )
# socket.puts "Watch this get cut short!"
# socket.close
#
# ### Unix-based Exceptions
# On unix-based based systems the following system exceptions may be raised if
# the call to *recvfrom* fails:
# * Errno::EAGAIN - the `socket` file descriptor is marked as O_NONBLOCK and
# no data is waiting to be received; or MSG_OOB is set and no out-of-band
# data is available and either the `socket` file descriptor is marked as
# O_NONBLOCK or the `socket` does not support blocking to wait for
# out-of-band-data
# * Errno::EWOULDBLOCK - see Errno::EAGAIN
# * Errno::EBADF - the `socket` is not a valid file descriptor
# * Errno::ECONNRESET - a connection was forcibly closed by a peer
# * Errno::EFAULT - the socket's internal buffer, address or address length
# cannot be accessed or written
# * Errno::EINTR - a signal interrupted *recvfrom* before any data was
# available
# * Errno::EINVAL - the MSG_OOB flag is set and no out-of-band data is
# available
# * Errno::EIO - an i/o error occurred while reading from or writing to the
# filesystem
# * Errno::ENOBUFS - insufficient resources were available in the system to
# perform the operation
# * Errno::ENOMEM - insufficient memory was available to fulfill the request
# * Errno::ENOSR - there were insufficient STREAMS resources available to
# complete the operation
# * Errno::ENOTCONN - a receive is attempted on a connection-mode socket that
# is not connected
# * Errno::ENOTSOCK - the `socket` does not refer to a socket
# * Errno::EOPNOTSUPP - the specified flags are not supported for this socket
# type
# * Errno::ETIMEDOUT - the connection timed out during connection
# establishment or due to a transmission timeout on an active connection
#
#
# ### Windows Exceptions
# On Windows systems the following system exceptions may be raised if the call
# to *recvfrom* fails:
# * Errno::ENETDOWN - the network is down
# * Errno::EFAULT - the internal buffer and from parameters on `socket` are
# not part of the user address space, or the internal fromlen parameter is
# too small to accommodate the peer address
# * Errno::EINTR - the (blocking) call was cancelled by an internal call to
# the WinSock function WSACancelBlockingCall
# * Errno::EINPROGRESS - a blocking Windows Sockets 1.1 call is in progress or
# the service provider is still processing a callback function
# * Errno::EINVAL - `socket` has not been bound with a call to *bind*, or an
# unknown flag was specified, or MSG_OOB was specified for a socket with
# SO_OOBINLINE enabled, or (for byte stream-style sockets only) the internal
# len parameter on `socket` was zero or negative
# * Errno::EISCONN - `socket` is already connected. The call to *recvfrom* is
# not permitted with a connected socket on a socket that is connection
# oriented or connectionless.
# * Errno::ENETRESET - the connection has been broken due to the keep-alive
# activity detecting a failure while the operation was in progress.
# * Errno::EOPNOTSUPP - MSG_OOB was specified, but `socket` is not
# stream-style such as type SOCK_STREAM. OOB data is not supported in the
# communication domain associated with `socket`, or `socket` is
# unidirectional and supports only send operations
# * Errno::ESHUTDOWN - `socket` has been shutdown. It is not possible to call
# *recvfrom* on a socket after *shutdown* has been invoked.
# * Errno::EWOULDBLOCK - `socket` is marked as nonblocking and a call to
# *recvfrom* would block.
# * Errno::EMSGSIZE - the message was too large to fit into the specified
# buffer and was truncated.
# * Errno::ETIMEDOUT - the connection has been dropped, because of a network
# failure or because the system on the other end went down without notice
# * Errno::ECONNRESET - the virtual circuit was reset by the remote side
# executing a hard or abortive close. The application should close the
# socket; it is no longer usable. On a UDP-datagram socket this error
# indicates a previous send operation resulted in an ICMP Port Unreachable
# message.
#
def recvfrom: (Integer maxlen, ?Integer flags) -> [ String, Addrinfo ]
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - socket.recvfrom_nonblock(maxlen[, flags[, outbuf[, opts]]]) => [mesg, sender_addrinfo]
# -->
# Receives up to *maxlen* bytes from `socket` using recvfrom(2) after O_NONBLOCK
# is set for the underlying file descriptor. *flags* is zero or more of the
# `MSG_` options. The first element of the results, *mesg*, is the data
# received. The second element, *sender_addrinfo*, contains protocol-specific
# address information of the sender.
#
# When recvfrom(2) returns 0, Socket#recvfrom_nonblock returns an empty string
# as data. The meaning depends on the socket: EOF on TCP, empty packet on UDP,
# etc.
#
# ### Parameters
# * `maxlen` - the maximum number of bytes to receive from the socket
# * `flags` - zero or more of the `MSG_` options
# * `outbuf` - destination String buffer
# * `opts` - keyword hash, supporting `exception: false`
#
#
# ### Example
# # In one file, start this first
# require 'socket'
# include Socket::Constants
# socket = Socket.new(AF_INET, SOCK_STREAM, 0)
# sockaddr = Socket.sockaddr_in(2200, 'localhost')
# socket.bind(sockaddr)
# socket.listen(5)
# client, client_addrinfo = socket.accept
# begin # emulate blocking recvfrom
# pair = client.recvfrom_nonblock(20)
# rescue IO::WaitReadable
# IO.select([client])
# retry
# end
# data = pair[0].chomp
# puts "I only received 20 bytes '#{data}'"
# sleep 1
# socket.close
#
# # In another file, start this second
# require 'socket'
# include Socket::Constants
# socket = Socket.new(AF_INET, SOCK_STREAM, 0)
# sockaddr = Socket.sockaddr_in(2200, 'localhost')
# socket.connect(sockaddr)
# socket.puts "Watch this get cut short!"
# socket.close
#
# Refer to Socket#recvfrom for the exceptions that may be thrown if the call to
# *recvfrom_nonblock* fails.
#
# Socket#recvfrom_nonblock may raise any error corresponding to recvfrom(2)
# failure, including Errno::EWOULDBLOCK.
#
# If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN, it is extended by
# IO::WaitReadable. So IO::WaitReadable can be used to rescue the exceptions for
# retrying recvfrom_nonblock.
#
# By specifying a keyword argument *exception* to `false`, you can indicate that
# recvfrom_nonblock should not raise an IO::WaitReadable exception, but return
# the symbol `:wait_readable` instead.
#
# ### See
# * Socket#recvfrom
#
def recvfrom_nonblock: (Integer maxlen, ?Integer flags, ?untyped outbuf, ?exception: boolish) -> ([ String, Addrinfo ] | :wait_readable)
# <!--
# rdoc-file=ext/socket/socket.c
# - socket.sysaccept => [client_socket_fd, client_addrinfo]
# -->
# Accepts an incoming connection returning an array containing the (integer)
# file descriptor for the incoming connection, *client_socket_fd*, and an
# Addrinfo, *client_addrinfo*.
#
# ### Example
# # In one script, start this first
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.bind( sockaddr )
# socket.listen( 5 )
# client_fd, client_addrinfo = socket.sysaccept
# client_socket = Socket.for_fd( client_fd )
# puts "The client said, '#{client_socket.readline.chomp}'"
# client_socket.puts "Hello from script one!"
# socket.close
#
# # In another script, start this second
# require 'socket'
# include Socket::Constants
# socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
# sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
# socket.connect( sockaddr )
# socket.puts "Hello from script 2."
# puts "The server said, '#{socket.readline.chomp}'"
# socket.close
#
# Refer to Socket#accept for the exceptions that may be thrown if the call to
# *sysaccept* fails.
#
# ### See
# * Socket#accept
#
def sysaccept: () -> [ Integer, Addrinfo ]
private
def __accept_nonblock: (untyped) -> untyped
def __connect_nonblock: (untyped, untyped) -> untyped
def __recvfrom_nonblock: (untyped, untyped, untyped, untyped) -> untyped
# <!--
# rdoc-file=ext/socket/socket.c
# - Socket.new(domain, socktype [, protocol]) => socket
# -->
# Creates a new socket object.
#
# *domain* should be a communications domain such as: :INET, :INET6, :UNIX, etc.
#
# *socktype* should be a socket type such as: :STREAM, :DGRAM, :RAW, etc.
#
# *protocol* is optional and should be a protocol defined in the domain. If
# protocol is not given, 0 is used internally.
#
# Socket.new(:INET, :STREAM) # TCP socket
# Socket.new(:INET, :DGRAM) # UDP socket
# Socket.new(:UNIX, :STREAM) # UNIX stream socket
# Socket.new(:UNIX, :DGRAM) # UNIX datagram socket
#
def initialize: (Symbol domain, Symbol socktype, ?Integer protocol) -> untyped
end
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Interface to kernel crypto API
#
Socket::AF_ALG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AppleTalk protocol
#
Socket::AF_APPLETALK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Asynchronous Transfer Mode
#
Socket::AF_ATM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AX.25 protocol
#
Socket::AF_AX25: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Bluetooth low-level socket protocol
#
Socket::AF_BLUETOOTH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Controller Area Network automotive bus protocol
#
Socket::AF_CAN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# CCITT (now ITU-T) protocols
#
Socket::AF_CCITT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# MIT CHAOS protocols
#
Socket::AF_CHAOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Computer Network Technology
#
Socket::AF_CNT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Connection-oriented IP
#
Socket::AF_COIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Datakit protocol
#
Socket::AF_DATAKIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DECnet protocol
#
Socket::AF_DEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DECnet protocol
#
Socket::AF_DECnet: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DEC Direct Data Link Interface protocol
#
Socket::AF_DLI: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# CCITT (ITU-T) E.164 recommendation
#
Socket::AF_E164: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# European Computer Manufacturers protocols
#
Socket::AF_ECMA: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# NSC Hyperchannel protocol
#
Socket::AF_HYLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# InfiniBand native addressing
#
Socket::AF_IB: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ARPANET IMP protocol
#
Socket::AF_IMPLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPv4 protocol
#
Socket::AF_INET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPv6 protocol
#
Socket::AF_INET6: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPX protocol
#
Socket::AF_IPX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Integrated Services Digital Network
#
Socket::AF_ISDN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO Open Systems Interconnection protocols
#
Socket::AF_ISO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# KCM (kernel connection multiplexor) interface
#
Socket::AF_KCM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Key management protocol, originally developed for usage with IPsec
#
Socket::AF_KEY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Local Area Transport protocol
#
Socket::AF_LAT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Link layer interface
#
Socket::AF_LINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Logical link control (IEEE 802.2 LLC) protocol
#
Socket::AF_LLC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Host-internal protocols
#
Socket::AF_LOCAL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum address family for this platform
#
Socket::AF_MAX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Multiprotocol Label Switching
#
Socket::AF_MPLS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Native ATM access
#
Socket::AF_NATM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Network driver raw access
#
Socket::AF_NDRV: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# NetBIOS
#
Socket::AF_NETBIOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Netgraph sockets
#
Socket::AF_NETGRAPH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Kernel user interface device
#
Socket::AF_NETLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# XEROX NS protocols
#
Socket::AF_NS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO Open Systems Interconnection protocols
#
Socket::AF_OSI: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Direct link-layer access
#
Socket::AF_PACKET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Point-to-Point Protocol
#
Socket::AF_PPP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Generic PPP transport layer, for setting up L2 tunnels (L2TP and PPPoE)
#
Socket::AF_PPPOX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# PARC Universal Packet protocol
#
Socket::AF_PUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Reliable Datagram Sockets (RDS) protocol
#
Socket::AF_RDS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Internal routing protocol
#
Socket::AF_ROUTE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Simple Internet Protocol
#
Socket::AF_SIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IBM SNA protocol
#
Socket::AF_SNA: Integer
Socket::AF_SYSTEM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TIPC, "cluster domain sockets" protocol
#
Socket::AF_TIPC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# UNIX sockets
#
Socket::AF_UNIX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Unspecified protocol, any supported address family
#
Socket::AF_UNSPEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# VSOCK (originally "VMWare VSockets") protocol for hypervisor-guest
# communication
#
Socket::AF_VSOCK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# XDP (express data path) interface
#
Socket::AF_XDP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Accept only if any address is assigned
#
Socket::AI_ADDRCONFIG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allow all addresses
#
Socket::AI_ALL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Fill in the canonical name
#
Socket::AI_CANONNAME: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Default flags for getaddrinfo
#
Socket::AI_DEFAULT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Valid flag mask for getaddrinfo (not for application use)
#
Socket::AI_MASK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Prevent host name resolution
#
Socket::AI_NUMERICHOST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Prevent service name resolution
#
Socket::AI_NUMERICSERV: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Get address to use with bind()
#
Socket::AI_PASSIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Accept IPv4-mapped IPv6 addresses
#
Socket::AI_V4MAPPED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Accept IPv4 mapped addresses if the kernel supports it
#
Socket::AI_V4MAPPED_CFG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Address family for hostname not supported
#
Socket::EAI_ADDRFAMILY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Temporary failure in name resolution
#
Socket::EAI_AGAIN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Invalid flags
#
Socket::EAI_BADFLAGS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Invalid value for hints
#
Socket::EAI_BADHINTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Non-recoverable failure in name resolution
#
Socket::EAI_FAIL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Address family not supported
#
Socket::EAI_FAMILY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum error code from getaddrinfo
#
Socket::EAI_MAX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Memory allocation failure
#
Socket::EAI_MEMORY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# No address associated with hostname
#
Socket::EAI_NODATA: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Hostname nor servname, or not known
#
Socket::EAI_NONAME: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Argument buffer overflow
#
Socket::EAI_OVERFLOW: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Resolved protocol is unknown
#
Socket::EAI_PROTOCOL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Servname not supported for socket type
#
Socket::EAI_SERVICE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Socket type not supported
#
Socket::EAI_SOCKTYPE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# System error returned in errno
#
Socket::EAI_SYSTEM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# 802.1Q VLAN device
#
Socket::IFF_802_1Q_VLAN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# receive all multicast packets
#
Socket::IFF_ALLMULTI: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# use alternate physical connection
#
Socket::IFF_ALTPHYS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# auto media select active
#
Socket::IFF_AUTOMEDIA: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# bonding master or slave
#
Socket::IFF_BONDING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# device used as bridge port
#
Socket::IFF_BRIDGE_PORT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# broadcast address valid
#
Socket::IFF_BROADCAST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# flags not changeable
#
Socket::IFF_CANTCHANGE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# unconfigurable using ioctl(2)
#
Socket::IFF_CANTCONFIG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# turn on debugging
#
Socket::IFF_DEBUG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# disable netpoll at run-time
#
Socket::IFF_DISABLE_NETPOLL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# disallow bridging this ether dev
#
Socket::IFF_DONT_BRIDGE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# driver signals dormant
#
Socket::IFF_DORMANT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# tx hardware queue is full
#
Socket::IFF_DRV_OACTIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# resources allocated
#
Socket::IFF_DRV_RUNNING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# interface is winding down
#
Socket::IFF_DYING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# dialup device with changing addresses
#
Socket::IFF_DYNAMIC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ethernet bridging device
#
Socket::IFF_EBRIDGE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# echo sent packets
#
Socket::IFF_ECHO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISATAP interface (RFC4214)
#
Socket::IFF_ISATAP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# per link layer defined bit 0
#
Socket::IFF_LINK0: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# per link layer defined bit 1
#
Socket::IFF_LINK1: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# per link layer defined bit 2
#
Socket::IFF_LINK2: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# hardware address change when it's running
#
Socket::IFF_LIVE_ADDR_CHANGE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# loopback net
#
Socket::IFF_LOOPBACK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# driver signals L1 up
#
Socket::IFF_LOWER_UP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# device used as macvlan port
#
Socket::IFF_MACVLAN_PORT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# master of a load balancer
#
Socket::IFF_MASTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# bonding master, 802.3ad.
#
Socket::IFF_MASTER_8023AD: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# bonding master, balance-alb.
#
Socket::IFF_MASTER_ALB: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# bonding master, ARP mon in use
#
Socket::IFF_MASTER_ARPMON: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# user-requested monitor mode
#
Socket::IFF_MONITOR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# supports multicast
#
Socket::IFF_MULTICAST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# no address resolution protocol
#
Socket::IFF_NOARP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# avoid use of trailers
#
Socket::IFF_NOTRAILERS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# transmission in progress
#
Socket::IFF_OACTIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# device used as Open vSwitch datapath port
#
Socket::IFF_OVS_DATAPATH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# point-to-point link
#
Socket::IFF_POINTOPOINT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# can set media type
#
Socket::IFF_PORTSEL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# user-requested promisc mode
#
Socket::IFF_PPROMISC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# receive all packets
#
Socket::IFF_PROMISC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# interface is being renamed
#
Socket::IFF_RENAMING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# routing entry installed
#
Socket::IFF_ROUTE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# resources allocated
#
Socket::IFF_RUNNING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# can't hear own transmissions
#
Socket::IFF_SIMPLEX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# slave of a load balancer
#
Socket::IFF_SLAVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# bonding slave not the curr. active
#
Socket::IFF_SLAVE_INACTIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# need ARPs for validation
#
Socket::IFF_SLAVE_NEEDARP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# interface manages own routes
#
Socket::IFF_SMART: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# static ARP
#
Socket::IFF_STATICARP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# sending custom FCS
#
Socket::IFF_SUPP_NOFCS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# used as team port
#
Socket::IFF_TEAM_PORT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# sharing skbs on transmit
#
Socket::IFF_TX_SKB_SHARING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# unicast filtering
#
Socket::IFF_UNICAST_FLT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# interface is up
#
Socket::IFF_UP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# volatile flags
#
Socket::IFF_VOLATILE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# WAN HDLC device
#
Socket::IFF_WAN_HDLC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# dev_hard_start_xmit() is allowed to release skb->dst
#
Socket::IFF_XMIT_DST_RELEASE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum interface name size
#
Socket::IFNAMSIZ: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum interface name size
#
Socket::IF_NAMESIZE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Multicast group for all systems on this subset
#
Socket::INADDR_ALLHOSTS_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A socket bound to INADDR_ANY receives packets from all interfaces and sends
# from the default IP address
#
Socket::INADDR_ANY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The network broadcast address
#
Socket::INADDR_BROADCAST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The loopback address
#
Socket::INADDR_LOOPBACK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The last local network multicast group
#
Socket::INADDR_MAX_LOCAL_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A bitmask for matching no valid IP address
#
Socket::INADDR_NONE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The reserved multicast group
#
Socket::INADDR_UNSPEC_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum length of an IPv6 address string
#
Socket::INET6_ADDRSTRLEN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum length of an IPv4 address string
#
Socket::INET_ADDRSTRLEN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Default minimum address for bind or connect
#
Socket::IPPORT_RESERVED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Default maximum address for bind or connect
#
Socket::IPPORT_USERRESERVED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 auth header
#
Socket::IPPROTO_AH: Integer
Socket::IPPROTO_BIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 destination option
#
Socket::IPPROTO_DSTOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Exterior Gateway Protocol
#
Socket::IPPROTO_EGP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO cnlp
#
Socket::IPPROTO_EON: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 Encapsulated Security Payload
#
Socket::IPPROTO_ESP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 fragmentation header
#
Socket::IPPROTO_FRAGMENT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Gateway to Gateway Protocol
#
Socket::IPPROTO_GGP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# "hello" routing protocol
#
Socket::IPPROTO_HELLO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 hop-by-hop options
#
Socket::IPPROTO_HOPOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Control message protocol
#
Socket::IPPROTO_ICMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ICMP6
#
Socket::IPPROTO_ICMPV6: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# XNS IDP
#
Socket::IPPROTO_IDP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Group Management Protocol
#
Socket::IPPROTO_IGMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Dummy protocol for IP
#
Socket::IPPROTO_IP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 header
#
Socket::IPPROTO_IPV6: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum IPPROTO constant
#
Socket::IPPROTO_MAX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Sun net disk protocol
#
Socket::IPPROTO_ND: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 no next header
#
Socket::IPPROTO_NONE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# PARC Universal Packet protocol
#
Socket::IPPROTO_PUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Raw IP packet
#
Socket::IPPROTO_RAW: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 routing header
#
Socket::IPPROTO_ROUTING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TCP
#
Socket::IPPROTO_TCP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO transport protocol class 4
#
Socket::IPPROTO_TP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# UDP
#
Socket::IPPROTO_UDP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Xpress Transport Protocol
#
Socket::IPPROTO_XTP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Checksum offset for raw sockets
#
Socket::IPV6_CHECKSUM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't fragment packets
#
Socket::IPV6_DONTFRAG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Destination option
#
Socket::IPV6_DSTOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Hop limit
#
Socket::IPV6_HOPLIMIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Hop-by-hop option
#
Socket::IPV6_HOPOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Join a group membership
#
Socket::IPV6_JOIN_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Leave a group membership
#
Socket::IPV6_LEAVE_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 multicast hops
#
Socket::IPV6_MULTICAST_HOPS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 multicast interface
#
Socket::IPV6_MULTICAST_IF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 multicast loopback
#
Socket::IPV6_MULTICAST_LOOP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Next hop address
#
Socket::IPV6_NEXTHOP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Retrieve current path MTU
#
Socket::IPV6_PATHMTU: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive packet information with datagram
#
Socket::IPV6_PKTINFO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive all IP6 options for response
#
Socket::IPV6_RECVDSTOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive hop limit with datagram
#
Socket::IPV6_RECVHOPLIMIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive hop-by-hop options
#
Socket::IPV6_RECVHOPOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive current path MTU with datagram
#
Socket::IPV6_RECVPATHMTU: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive destination IP address and incoming interface
#
Socket::IPV6_RECVPKTINFO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive routing header
#
Socket::IPV6_RECVRTHDR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive traffic class
#
Socket::IPV6_RECVTCLASS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allows removal of sticky routing headers
#
Socket::IPV6_RTHDR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allows removal of sticky destination options header
#
Socket::IPV6_RTHDRDSTOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Routing header type 0
#
Socket::IPV6_RTHDR_TYPE_0: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Specify the traffic class
#
Socket::IPV6_TCLASS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP6 unicast hops
#
Socket::IPV6_UNICAST_HOPS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Use the minimum MTU size
#
Socket::IPV6_USE_MIN_MTU: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Only bind IPv6 with a wildcard bind
#
Socket::IPV6_V6ONLY: Integer
Socket::IPX_TYPE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Add a multicast group membership
#
Socket::IP_ADD_MEMBERSHIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Add a multicast group membership
#
Socket::IP_ADD_SOURCE_MEMBERSHIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Block IPv4 multicast packets with a give source address
#
Socket::IP_BLOCK_SOURCE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Default multicast loopback
#
Socket::IP_DEFAULT_MULTICAST_LOOP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Default multicast TTL
#
Socket::IP_DEFAULT_MULTICAST_TTL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't fragment packets
#
Socket::IP_DONTFRAG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Drop a multicast group membership
#
Socket::IP_DROP_MEMBERSHIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Drop a multicast group membership
#
Socket::IP_DROP_SOURCE_MEMBERSHIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allow binding to nonexistent IP addresses
#
Socket::IP_FREEBIND: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Header is included with data
#
Socket::IP_HDRINCL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPsec security policy
#
Socket::IP_IPSEC_POLICY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum number multicast groups a socket can join
#
Socket::IP_MAX_MEMBERSHIPS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Minimum TTL allowed for received packets
#
Socket::IP_MINTTL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Multicast source filtering
#
Socket::IP_MSFILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The Maximum Transmission Unit of the socket
#
Socket::IP_MTU: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Path MTU discovery
#
Socket::IP_MTU_DISCOVER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP multicast interface
#
Socket::IP_MULTICAST_IF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP multicast loopback
#
Socket::IP_MULTICAST_LOOP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP multicast TTL
#
Socket::IP_MULTICAST_TTL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Force outgoing broadcast datagrams to have the undirected broadcast address
#
Socket::IP_ONESBCAST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP options to be included in packets
#
Socket::IP_OPTIONS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Retrieve security context with datagram
#
Socket::IP_PASSSEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive packet information with datagrams
#
Socket::IP_PKTINFO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive packet options with datagrams
#
Socket::IP_PKTOPTIONS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Always send DF frames
#
Socket::IP_PMTUDISC_DO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Never send DF frames
#
Socket::IP_PMTUDISC_DONT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Use per-route hints
#
Socket::IP_PMTUDISC_WANT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the port range for sockets with unspecified port numbers
#
Socket::IP_PORTRANGE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive IP destination address with datagram
#
Socket::IP_RECVDSTADDR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Enable extended reliable error message passing
#
Socket::IP_RECVERR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive interface information with datagrams
#
Socket::IP_RECVIF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive all IP options with datagram
#
Socket::IP_RECVOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive all IP options for response
#
Socket::IP_RECVRETOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive link-layer address with datagrams
#
Socket::IP_RECVSLLA: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive TOS with incoming packets
#
Socket::IP_RECVTOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive IP TTL with datagrams
#
Socket::IP_RECVTTL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP options to be included in datagrams
#
Socket::IP_RETOPTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Notify transit routers to more closely examine the contents of an IP packet
#
Socket::IP_ROUTER_ALERT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Source address for outgoing UDP datagrams
#
Socket::IP_SENDSRCADDR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP type-of-service
#
Socket::IP_TOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Transparent proxy
#
Socket::IP_TRANSPARENT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP time-to-live
#
Socket::IP_TTL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Unblock IPv4 multicast packets with a give source address
#
Socket::IP_UNBLOCK_SOURCE: Integer
Socket::IP_XFRM_POLICY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Connect blocks until accepted
#
Socket::LOCAL_CONNWAIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Pass credentials to receiver
#
Socket::LOCAL_CREDS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Retrieve peer credentials
#
Socket::LOCAL_PEERCRED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Block multicast packets from this source
#
Socket::MCAST_BLOCK_SOURCE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Exclusive multicast source filter
#
Socket::MCAST_EXCLUDE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Inclusive multicast source filter
#
Socket::MCAST_INCLUDE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Join a multicast group
#
Socket::MCAST_JOIN_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Join a multicast source group
#
Socket::MCAST_JOIN_SOURCE_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Leave a multicast group
#
Socket::MCAST_LEAVE_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Leave a multicast source group
#
Socket::MCAST_LEAVE_SOURCE_GROUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Multicast source filtering
#
Socket::MCAST_MSFILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Unblock multicast packets from this source
#
Socket::MCAST_UNBLOCK_SOURCE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# End of record
#
Socket::MSG_COMPAT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Confirm path validity
#
Socket::MSG_CONFIRM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Control data lost before delivery
#
Socket::MSG_CTRUNC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send without using the routing tables
#
Socket::MSG_DONTROUTE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# This message should be non-blocking
#
Socket::MSG_DONTWAIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Data completes connection
#
Socket::MSG_EOF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Data completes record
#
Socket::MSG_EOR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Fetch message from error queue
#
Socket::MSG_ERRQUEUE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Reduce step of the handshake process
#
Socket::MSG_FASTOPEN: Integer
Socket::MSG_FIN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Start of a hold sequence. Dumps to so_temp
#
Socket::MSG_FLUSH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Data ready to be read
#
Socket::MSG_HAVEMORE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Hold fragment in so_temp
#
Socket::MSG_HOLD: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Sender will send more
#
Socket::MSG_MORE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Do not generate SIGPIPE
#
Socket::MSG_NOSIGNAL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Process out-of-band data
#
Socket::MSG_OOB: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Peek at incoming message
#
Socket::MSG_PEEK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Wait for full request
#
Socket::MSG_PROXY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Data remains in the current packet
#
Socket::MSG_RCVMORE: Integer
Socket::MSG_RST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send the packet in so_temp
#
Socket::MSG_SEND: Integer
Socket::MSG_SYN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Data discarded before delivery
#
Socket::MSG_TRUNC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Wait for full request or error
#
Socket::MSG_WAITALL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The service specified is a datagram service (looks up UDP ports)
#
Socket::NI_DGRAM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum length of a hostname
#
Socket::NI_MAXHOST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum length of a service name
#
Socket::NI_MAXSERV: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A name is required
#
Socket::NI_NAMEREQD: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# An FQDN is not required for local hosts, return only the local part
#
Socket::NI_NOFQDN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Return a numeric address
#
Socket::NI_NUMERICHOST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Return the service name as a digit string
#
Socket::NI_NUMERICSERV: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Interface to kernel crypto API
#
Socket::PF_ALG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AppleTalk protocol
#
Socket::PF_APPLETALK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Asynchronous Transfer Mode
#
Socket::PF_ATM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AX.25 protocol
#
Socket::PF_AX25: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Bluetooth low-level socket protocol
#
Socket::PF_BLUETOOTH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Controller Area Network automotive bus protocol
#
Socket::PF_CAN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# CCITT (now ITU-T) protocols
#
Socket::PF_CCITT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# MIT CHAOS protocols
#
Socket::PF_CHAOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Computer Network Technology
#
Socket::PF_CNT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Connection-oriented IP
#
Socket::PF_COIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Datakit protocol
#
Socket::PF_DATAKIT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DECnet protocol
#
Socket::PF_DEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DECnet protocol
#
Socket::PF_DECnet: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# DEC Direct Data Link Interface protocol
#
Socket::PF_DLI: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# European Computer Manufacturers protocols
#
Socket::PF_ECMA: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# NSC Hyperchannel protocol
#
Socket::PF_HYLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# InfiniBand native addressing
#
Socket::PF_IB: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ARPANET IMP protocol
#
Socket::PF_IMPLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPv4 protocol
#
Socket::PF_INET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPv6 protocol
#
Socket::PF_INET6: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPX protocol
#
Socket::PF_IPX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Integrated Services Digital Network
#
Socket::PF_ISDN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO Open Systems Interconnection protocols
#
Socket::PF_ISO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# KCM (kernel connection multiplexor) interface
#
Socket::PF_KCM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Key management protocol, originally developed for usage with IPsec
#
Socket::PF_KEY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Local Area Transport protocol
#
Socket::PF_LAT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Link layer interface
#
Socket::PF_LINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Logical link control (IEEE 802.2 LLC) protocol
#
Socket::PF_LLC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Host-internal protocols
#
Socket::PF_LOCAL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum address family for this platform
#
Socket::PF_MAX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Multiprotocol Label Switching
#
Socket::PF_MPLS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Native ATM access
#
Socket::PF_NATM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Network driver raw access
#
Socket::PF_NDRV: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# NetBIOS
#
Socket::PF_NETBIOS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Netgraph sockets
#
Socket::PF_NETGRAPH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Kernel user interface device
#
Socket::PF_NETLINK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# XEROX NS protocols
#
Socket::PF_NS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# ISO Open Systems Interconnection protocols
#
Socket::PF_OSI: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Direct link-layer access
#
Socket::PF_PACKET: Integer
Socket::PF_PIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Point-to-Point Protocol
#
Socket::PF_PPP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Generic PPP transport layer, for setting up L2 tunnels (L2TP and PPPoE)
#
Socket::PF_PPPOX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# PARC Universal Packet protocol
#
Socket::PF_PUP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Reliable Datagram Sockets (RDS) protocol
#
Socket::PF_RDS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Internal routing protocol
#
Socket::PF_ROUTE: Integer
Socket::PF_RTIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Simple Internet Protocol
#
Socket::PF_SIP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IBM SNA protocol
#
Socket::PF_SNA: Integer
Socket::PF_SYSTEM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TIPC, "cluster domain sockets" protocol
#
Socket::PF_TIPC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# UNIX sockets
#
Socket::PF_UNIX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Unspecified protocol, any supported address family
#
Socket::PF_UNSPEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# VSOCK (originally "VMWare VSockets") protocol for hypervisor-guest
# communication
#
Socket::PF_VSOCK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# XDP (express data path) interface
#
Socket::PF_XDP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# eXpress Transfer Protocol
#
Socket::PF_XTP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Timestamp (bintime)
#
Socket::SCM_BINTIME: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The sender's credentials
#
Socket::SCM_CREDENTIALS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Process credentials
#
Socket::SCM_CREDS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Access rights
#
Socket::SCM_RIGHTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Timestamp (timeval)
#
Socket::SCM_TIMESTAMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Timestamp (timespec list) (Linux 2.6.30)
#
Socket::SCM_TIMESTAMPING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Timespec (timespec)
#
Socket::SCM_TIMESTAMPNS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# User credentials
#
Socket::SCM_UCRED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Wifi status (Linux 3.3)
#
Socket::SCM_WIFI_STATUS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Shut down the reading side of the socket
#
Socket::SHUT_RD: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Shut down the both sides of the socket
#
Socket::SHUT_RDWR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Shut down the writing side of the socket
#
Socket::SHUT_WR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the close-on-exec (FD_CLOEXEC) flag on the new file descriptor.
#
Socket::SOCK_CLOEXEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A datagram socket provides connectionless, unreliable messaging
#
Socket::SOCK_DGRAM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the O_NONBLOCK file status flag on the open file description (see open(2))
# referred to by the new file descriptor.
#
Socket::SOCK_NONBLOCK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Device-level packet access
#
Socket::SOCK_PACKET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A raw socket provides low-level access for direct access or implementing
# network protocols
#
Socket::SOCK_RAW: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A reliable datagram socket provides reliable delivery of messages
#
Socket::SOCK_RDM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A sequential packet socket provides sequenced, reliable two-way connection for
# datagrams
#
Socket::SOCK_SEQPACKET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# A stream socket provides a sequenced, reliable two-way connection for a byte
# stream
#
Socket::SOCK_STREAM: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AppleTalk socket options
#
Socket::SOL_ATALK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# AX.25 socket options
#
Socket::SOL_AX25: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IP socket options
#
Socket::SOL_IP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# IPX socket options
#
Socket::SOL_IPX: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Socket-level options
#
Socket::SOL_SOCKET: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TCP socket options
#
Socket::SOL_TCP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# UDP socket options
#
Socket::SOL_UDP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum connection requests that may be queued for a socket
#
Socket::SOMAXCONN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Background socket priority
#
Socket::SOPRI_BACKGROUND: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Interactive socket priority
#
Socket::SOPRI_INTERACTIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Normal socket priority
#
Socket::SOPRI_NORMAL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Socket has had listen() called on it
#
Socket::SO_ACCEPTCONN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# There is an accept filter
#
Socket::SO_ACCEPTFILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Bypass zone boundaries
#
Socket::SO_ALLZONES: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Attach an accept filter
#
Socket::SO_ATTACH_FILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Only send packets from the given interface
#
Socket::SO_BINDTODEVICE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive timestamp with datagrams (bintime)
#
Socket::SO_BINTIME: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Query supported BPF extensions (Linux 3.14)
#
Socket::SO_BPF_EXTENSIONS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Permit sending of broadcast messages
#
Socket::SO_BROADCAST: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the threshold in microseconds for low latency polling (Linux 3.11)
#
Socket::SO_BUSY_POLL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Debug info recording
#
Socket::SO_DEBUG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Detach an accept filter
#
Socket::SO_DETACH_FILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Domain given for socket() (Linux 2.6.32)
#
Socket::SO_DOMAIN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Use interface addresses
#
Socket::SO_DONTROUTE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Retain unread data
#
Socket::SO_DONTTRUNC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Get and clear the error status
#
Socket::SO_ERROR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Obtain filter set by SO_ATTACH_FILTER (Linux 3.8)
#
Socket::SO_GET_FILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Keep connections alive
#
Socket::SO_KEEPALIVE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Linger on close if data is present
#
Socket::SO_LINGER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Lock the filter attached to a socket (Linux 3.9)
#
Socket::SO_LOCK_FILTER: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Mandatory Access Control exemption for unlabeled peers
#
Socket::SO_MAC_EXEMPT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the mark for mark-based routing (Linux 2.6.25)
#
Socket::SO_MARK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Cap the rate computed by transport layer. [bytes per second] (Linux 3.13)
#
Socket::SO_MAX_PACING_RATE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Install socket-level Network Kernel Extension
#
Socket::SO_NKE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set netns of a socket (Linux 3.4)
#
Socket::SO_NOFCS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't SIGPIPE on EPIPE
#
Socket::SO_NOSIGPIPE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Disable checksums
#
Socket::SO_NO_CHECK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Get first packet byte count
#
Socket::SO_NREAD: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Leave received out-of-band data in-line
#
Socket::SO_OOBINLINE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive SCM_CREDENTIALS messages
#
Socket::SO_PASSCRED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Toggle security context passing (Linux 2.6.18)
#
Socket::SO_PASSSEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set the peek offset (Linux 3.4)
#
Socket::SO_PEEK_OFF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The credentials of the foreign process connected to this socket
#
Socket::SO_PEERCRED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Name of the connecting user
#
Socket::SO_PEERNAME: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Obtain the security credentials (Linux 2.6.2)
#
Socket::SO_PEERSEC: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# The protocol-defined priority for all packets on this socket
#
Socket::SO_PRIORITY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Protocol given for socket() (Linux 2.6.32)
#
Socket::SO_PROTOCOL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive buffer size
#
Socket::SO_RCVBUF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive buffer size without rmem_max limit (Linux 2.6.14)
#
Socket::SO_RCVBUFFORCE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive low-water mark
#
Socket::SO_RCVLOWAT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive timeout
#
Socket::SO_RCVTIMEO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive user credentials with datagram
#
Socket::SO_RECVUCRED: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allow local address reuse
#
Socket::SO_REUSEADDR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Allow local address and port reuse
#
Socket::SO_REUSEPORT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Toggle cmsg for number of packets dropped (Linux 2.6.33)
#
Socket::SO_RXQ_OVFL: Integer
Socket::SO_SECURITY_AUTHENTICATION: Integer
Socket::SO_SECURITY_ENCRYPTION_NETWORK: Integer
Socket::SO_SECURITY_ENCRYPTION_TRANSPORT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Make select() detect socket error queue with errorfds (Linux 3.10)
#
Socket::SO_SELECT_ERR_QUEUE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send buffer size
#
Socket::SO_SNDBUF: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send buffer size without wmem_max limit (Linux 2.6.14)
#
Socket::SO_SNDBUFFORCE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send low-water mark
#
Socket::SO_SNDLOWAT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Send timeout
#
Socket::SO_SNDTIMEO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive timestamp with datagrams (timeval)
#
Socket::SO_TIMESTAMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Time stamping of incoming and outgoing packets (Linux 2.6.30)
#
Socket::SO_TIMESTAMPING: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Receive nanosecond timestamp with datagrams (timespec)
#
Socket::SO_TIMESTAMPNS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Get the socket type
#
Socket::SO_TYPE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Bypass hardware when possible
#
Socket::SO_USELOOPBACK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Give a hint when more data is ready
#
Socket::SO_WANTMORE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# OOB data is wanted in MSG_FLAG on receive
#
Socket::SO_WANTOOBFLAG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Toggle cmsg for wifi status (Linux 3.3)
#
Socket::SO_WIFI_STATUS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TCP congestion control algorithm (Linux 2.6.13, glibc 2.6)
#
Socket::TCP_CONGESTION: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TCP Cookie Transactions (Linux 2.6.33, glibc 2.18)
#
Socket::TCP_COOKIE_TRANSACTIONS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't send partial frames (Linux 2.2, glibc 2.2)
#
Socket::TCP_CORK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't notify a listening socket until data is ready (Linux 2.4, glibc 2.2)
#
Socket::TCP_DEFER_ACCEPT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Reduce step of the handshake process (Linux 3.7, glibc 2.18)
#
Socket::TCP_FASTOPEN: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Retrieve information about this socket (Linux 2.4, glibc 2.2)
#
Socket::TCP_INFO: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Maximum number of keepalive probes allowed before dropping a connection (Linux
# 2.4, glibc 2.2)
#
Socket::TCP_KEEPCNT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Idle time before keepalive probes are sent (Linux 2.4, glibc 2.2)
#
Socket::TCP_KEEPIDLE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Time between keepalive probes (Linux 2.4, glibc 2.2)
#
Socket::TCP_KEEPINTVL: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Lifetime of orphaned FIN_WAIT2 sockets (Linux 2.4, glibc 2.2)
#
Socket::TCP_LINGER2: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Set maximum segment size
#
Socket::TCP_MAXSEG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Use MD5 digests (RFC2385, Linux 2.6.20, glibc 2.7)
#
Socket::TCP_MD5SIG: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't delay sending to coalesce packets
#
Socket::TCP_NODELAY: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't use TCP options
#
Socket::TCP_NOOPT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't push the last block of write
#
Socket::TCP_NOPUSH: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Sequence of a queue for repair mode (Linux 3.5, glibc 2.18)
#
Socket::TCP_QUEUE_SEQ: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Enable quickack mode (Linux 2.4.4, glibc 2.3)
#
Socket::TCP_QUICKACK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Repair mode (Linux 3.5, glibc 2.18)
#
Socket::TCP_REPAIR: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Options for repair mode (Linux 3.5, glibc 2.18)
#
Socket::TCP_REPAIR_OPTIONS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Queue for repair mode (Linux 3.5, glibc 2.18)
#
Socket::TCP_REPAIR_QUEUE: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Number of SYN retransmits before a connection is dropped (Linux 2.4, glibc
# 2.2)
#
Socket::TCP_SYNCNT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Duplicated acknowledgments handling for thin-streams (Linux 2.6.34, glibc
# 2.18)
#
Socket::TCP_THIN_DUPACK: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Linear timeouts for thin-streams (Linux 2.6.34, glibc 2.18)
#
Socket::TCP_THIN_LINEAR_TIMEOUTS: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# TCP timestamp (Linux 3.9, glibc 2.18)
#
Socket::TCP_TIMESTAMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Max timeout before a TCP connection is aborted (Linux 2.6.37, glibc 2.18)
#
Socket::TCP_USER_TIMEOUT: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Clamp the size of the advertised window (Linux 2.4, glibc 2.2)
#
Socket::TCP_WINDOW_CLAMP: Integer
# <!-- rdoc-file=ext/socket/constdefs.c -->
# Don't send partial frames (Linux 2.5.44, glibc 2.11)
#
Socket::UDP_CORK: Integer
# <!-- rdoc-file=ext/socket/ifaddr.c -->
# Socket::Ifaddr represents a result of getifaddrs() function.
#
class Socket::Ifaddr
public
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.addr => addrinfo
# -->
# Returns the address of *ifaddr*. nil is returned if address is not available
# in *ifaddr*.
#
def addr: () -> Addrinfo?
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.broadaddr => addrinfo
# -->
# Returns the broadcast address of *ifaddr*. nil is returned if the flags
# doesn't have IFF_BROADCAST.
#
def broadaddr: () -> Addrinfo?
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.dstaddr => addrinfo
# -->
# Returns the destination address of *ifaddr*. nil is returned if the flags
# doesn't have IFF_POINTOPOINT.
#
def dstaddr: () -> Addrinfo?
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.flags => integer
# -->
# Returns the flags of *ifaddr*.
#
def flags: () -> Integer
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.ifindex => integer
# -->
# Returns the interface index of *ifaddr*.
#
def ifindex: () -> Integer
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.inspect => string
# -->
# Returns a string to show contents of *ifaddr*.
#
def inspect: () -> String
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.name => string
# -->
# Returns the interface name of *ifaddr*.
#
def name: () -> String
# <!--
# rdoc-file=ext/socket/ifaddr.c
# - ifaddr.netmask => addrinfo
# -->
# Returns the netmask address of *ifaddr*. nil is returned if netmask is not
# available in *ifaddr*.
#
def netmask: () -> Addrinfo?
end
# <!-- rdoc-file=ext/socket/lib/socket.rb -->
# UDP/IP address information used by Socket.udp_server_loop.
#
class Socket::UDPSource
public
def inspect: () -> String
# <!-- rdoc-file=ext/socket/lib/socket.rb -->
# Local address
#
def local_address: () -> Addrinfo
# <!-- rdoc-file=ext/socket/lib/socket.rb -->
# Address of the source
#
def remote_address: () -> Addrinfo
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - reply(msg)
# -->
# Sends the String `msg` to the source
#
def reply: (String msg) -> void
private
# <!--
# rdoc-file=ext/socket/lib/socket.rb
# - new(remote_address, local_address, &reply_proc)
# -->
# `remote_address` is an Addrinfo object.
#
# `local_address` is an Addrinfo object.
#
# `reply_proc` is a Proc used to send reply back to the source.
#
def initialize: (Addrinfo remote_address, Addrinfo local_address) { (String) -> void } -> void
end
# <!-- rdoc-file=ext/socket/ancdata.c -->
# Socket::AncillaryData represents the ancillary data (control information) used
# by sendmsg and recvmsg system call. It contains socket #family, control
# message (cmsg) #level, cmsg #type and cmsg #data.
#
class Socket::AncillaryData
# <!--
# rdoc-file=ext/socket/ancdata.c
# - Socket::AncillaryData.int(family, cmsg_level, cmsg_type, integer) => ancillarydata
# -->
# Creates a new Socket::AncillaryData object which contains a int as data.
#
# The size and endian is dependent on the host.
#
# require 'socket'
#
# p Socket::AncillaryData.int(:UNIX, :SOCKET, :RIGHTS, STDERR.fileno)
# #=> #<Socket::AncillaryData: UNIX SOCKET RIGHTS 2>
#
def self.int: (Symbol, Symbol, Symbol, Symbol) -> instance
# <!--
# rdoc-file=ext/socket/ancdata.c
# - Socket::AncillaryData.ip_pktinfo(addr, ifindex) => ancdata
# - Socket::AncillaryData.ip_pktinfo(addr, ifindex, spec_dst) => ancdata
# -->
# Returns new ancillary data for IP_PKTINFO.
#
# If spec_dst is not given, addr is used.
#
# IP_PKTINFO is not standard.
#
# Supported platform: GNU/Linux
#
# addr = Addrinfo.ip("127.0.0.1")
# ifindex = 0
# spec_dst = Addrinfo.ip("127.0.0.1")
# p Socket::AncillaryData.ip_pktinfo(addr, ifindex, spec_dst)
# #=> #<Socket::AncillaryData: INET IP PKTINFO 127.0.0.1 ifindex:0 spec_dst:127.0.0.1>
#
def self.ip_pktinfo: (Addrinfo addr, Integer ifindex, ?Addrinfo spec_dst) -> instance
# <!--
# rdoc-file=ext/socket/ancdata.c
# - Socket::AncillaryData.ipv6_pktinfo(addr, ifindex) => ancdata
# -->
# Returns new ancillary data for IPV6_PKTINFO.
#
# IPV6_PKTINFO is defined by RFC 3542.
#
# addr = Addrinfo.ip("::1")
# ifindex = 0
# p Socket::AncillaryData.ipv6_pktinfo(addr, ifindex)
# #=> #<Socket::AncillaryData: INET6 IPV6 PKTINFO ::1 ifindex:0>
#
def self.ipv6_pktinfo: (Addrinfo addr, Integer ifindex) -> instance
# <!--
# rdoc-file=ext/socket/ancdata.c
# - Socket::AncillaryData.unix_rights(io1, io2, ...) => ancillarydata
# -->
# Creates a new Socket::AncillaryData object which contains file descriptors as
# data.
#
# p Socket::AncillaryData.unix_rights(STDERR)
# #=> #<Socket::AncillaryData: UNIX SOCKET RIGHTS 2>
#
def self.unix_rights: (IO fd) -> instance
public
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.cmsg_is?(level, type) => true or false
# -->
# tests the level and type of *ancillarydata*.
#
# ancdata = Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "")
# ancdata.cmsg_is?(Socket::IPPROTO_IPV6, Socket::IPV6_PKTINFO) #=> true
# ancdata.cmsg_is?(:IPV6, :PKTINFO) #=> true
# ancdata.cmsg_is?(:IP, :PKTINFO) #=> false
# ancdata.cmsg_is?(:SOCKET, :RIGHTS) #=> false
#
def cmsg_is?: (Integer level, Integer ancillary_type) -> bool
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.data => string
# -->
# returns the cmsg data as a string.
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "").data
# #=> ""
#
def data: () -> String
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.family => integer
# -->
# returns the socket family as an integer.
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "").family
# #=> 10
#
def family: () -> Integer
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.inspect => string
# -->
# returns a string which shows ancillarydata in human-readable form.
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "").inspect
# #=> "#<Socket::AncillaryData: INET6 IPV6 PKTINFO \"\">"
#
def inspect: () -> String
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.int => integer
# -->
# Returns the data in *ancillarydata* as an int.
#
# The size and endian is dependent on the host.
#
# ancdata = Socket::AncillaryData.int(:UNIX, :SOCKET, :RIGHTS, STDERR.fileno)
# p ancdata.int #=> 2
#
def int: () -> Integer
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancdata.ip_pktinfo => [addr, ifindex, spec_dst]
# -->
# Extracts addr, ifindex and spec_dst from IP_PKTINFO ancillary data.
#
# IP_PKTINFO is not standard.
#
# Supported platform: GNU/Linux
#
# addr = Addrinfo.ip("127.0.0.1")
# ifindex = 0
# spec_dest = Addrinfo.ip("127.0.0.1")
# ancdata = Socket::AncillaryData.ip_pktinfo(addr, ifindex, spec_dest)
# p ancdata.ip_pktinfo
# #=> [#<Addrinfo: 127.0.0.1>, 0, #<Addrinfo: 127.0.0.1>]
#
def ip_pktinfo: () -> [ Addrinfo, Integer, Addrinfo ]
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancdata.ipv6_pktinfo => [addr, ifindex]
# -->
# Extracts addr and ifindex from IPV6_PKTINFO ancillary data.
#
# IPV6_PKTINFO is defined by RFC 3542.
#
# addr = Addrinfo.ip("::1")
# ifindex = 0
# ancdata = Socket::AncillaryData.ipv6_pktinfo(addr, ifindex)
# p ancdata.ipv6_pktinfo #=> [#<Addrinfo: ::1>, 0]
#
def ipv6_pktinfo: () -> [ Addrinfo, Integer ]
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancdata.ipv6_pktinfo_addr => addr
# -->
# Extracts addr from IPV6_PKTINFO ancillary data.
#
# IPV6_PKTINFO is defined by RFC 3542.
#
# addr = Addrinfo.ip("::1")
# ifindex = 0
# ancdata = Socket::AncillaryData.ipv6_pktinfo(addr, ifindex)
# p ancdata.ipv6_pktinfo_addr #=> #<Addrinfo: ::1>
#
def ipv6_pktinfo_addr: () -> Addrinfo
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancdata.ipv6_pktinfo_ifindex => addr
# -->
# Extracts ifindex from IPV6_PKTINFO ancillary data.
#
# IPV6_PKTINFO is defined by RFC 3542.
#
# addr = Addrinfo.ip("::1")
# ifindex = 0
# ancdata = Socket::AncillaryData.ipv6_pktinfo(addr, ifindex)
# p ancdata.ipv6_pktinfo_ifindex #=> 0
#
def ipv6_pktinfo_ifindex: () -> Integer
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.level => integer
# -->
# returns the cmsg level as an integer.
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "").level
# #=> 41
#
def level: () -> Integer
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.timestamp => time
# -->
# returns the timestamp as a time object.
#
# *ancillarydata* should be one of following type:
# * SOL_SOCKET/SCM_TIMESTAMP (microsecond) GNU/Linux, FreeBSD, NetBSD,
# OpenBSD, Solaris, MacOS X
# * SOL_SOCKET/SCM_TIMESTAMPNS (nanosecond) GNU/Linux
# * SOL_SOCKET/SCM_BINTIME (2**(-64) second) FreeBSD
#
# Addrinfo.udp("127.0.0.1", 0).bind {|s1|
# Addrinfo.udp("127.0.0.1", 0).bind {|s2|
# s1.setsockopt(:SOCKET, :TIMESTAMP, true)
# s2.send "a", 0, s1.local_address
# ctl = s1.recvmsg.last
# p ctl #=> #<Socket::AncillaryData: INET SOCKET TIMESTAMP 2009-02-24 17:35:46.775581>
# t = ctl.timestamp
# p t #=> 2009-02-24 17:35:46 +0900
# p t.usec #=> 775581
# p t.nsec #=> 775581000
# }
#
# }
#
def timestamp: () -> Time
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.type => integer
# -->
# returns the cmsg type as an integer.
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "").type
# #=> 2
#
def type: () -> Integer
# <!--
# rdoc-file=ext/socket/ancdata.c
# - ancillarydata.unix_rights => array-of-IOs or nil
# -->
# returns the array of IO objects for SCM_RIGHTS control message in UNIX domain
# socket.
#
# The class of the IO objects in the array is IO or Socket.
#
# The array is attached to *ancillarydata* when it is instantiated. For example,
# BasicSocket#recvmsg attach the array when receives a SCM_RIGHTS control
# message and :scm_rights=>true option is given.
#
# # recvmsg needs :scm_rights=>true for unix_rights
# s1, s2 = UNIXSocket.pair
# p s1 #=> #<UNIXSocket:fd 3>
# s1.sendmsg "stdin and a socket", 0, nil, Socket::AncillaryData.unix_rights(STDIN, s1)
# _, _, _, ctl = s2.recvmsg(:scm_rights=>true)
# p ctl #=> #<Socket::AncillaryData: UNIX SOCKET RIGHTS 6 7>
# p ctl.unix_rights #=> [#<IO:fd 6>, #<Socket:fd 7>]
# p File.identical?(STDIN, ctl.unix_rights[0]) #=> true
# p File.identical?(s1, ctl.unix_rights[1]) #=> true
#
# # If :scm_rights=>true is not given, unix_rights returns nil
# s1, s2 = UNIXSocket.pair
# s1.sendmsg "stdin and a socket", 0, nil, Socket::AncillaryData.unix_rights(STDIN, s1)
# _, _, _, ctl = s2.recvmsg
# p ctl #=> #<Socket::AncillaryData: UNIX SOCKET RIGHTS 6 7>
# p ctl.unix_rights #=> nil
#
def unix_rights: () -> Array[IO]?
private
# <!--
# rdoc-file=ext/socket/ancdata.c
# - Socket::AncillaryData.new(family, cmsg_level, cmsg_type, cmsg_data) -> ancillarydata
# -->
# *family* should be an integer, a string or a symbol.
# * Socket::AF_INET, "AF_INET", "INET", :AF_INET, :INET
# * Socket::AF_UNIX, "AF_UNIX", "UNIX", :AF_UNIX, :UNIX
# * etc.
#
#
# *cmsg_level* should be an integer, a string or a symbol.
# * Socket::SOL_SOCKET, "SOL_SOCKET", "SOCKET", :SOL_SOCKET and :SOCKET
# * Socket::IPPROTO_IP, "IP" and :IP
# * Socket::IPPROTO_IPV6, "IPV6" and :IPV6
# * Socket::IPPROTO_TCP, "TCP" and :TCP
# * etc.
#
#
# *cmsg_type* should be an integer, a string or a symbol. If a string/symbol is
# specified, it is interpreted depend on *cmsg_level*.
# * Socket::SCM_RIGHTS, "SCM_RIGHTS", "RIGHTS", :SCM_RIGHTS, :RIGHTS for
# SOL_SOCKET
# * Socket::IP_RECVTTL, "RECVTTL" and :RECVTTL for IPPROTO_IP
# * Socket::IPV6_PKTINFO, "PKTINFO" and :PKTINFO for IPPROTO_IPV6
# * etc.
#
#
# *cmsg_data* should be a string.
#
# p Socket::AncillaryData.new(:INET, :TCP, :NODELAY, "")
# #=> #<Socket::AncillaryData: INET TCP NODELAY "">
#
# p Socket::AncillaryData.new(:INET6, :IPV6, :PKTINFO, "")
# #=> #<Socket::AncillaryData: INET6 IPV6 PKTINFO "">
#
def initialize: (Symbol | String | Integer family, Symbol | String | Integer cmsg_level, Symbol | String | Integer cmsg_data, String cmsg_data) -> untyped
end