Class: Socket
| Relationships & Source Files | |
| Namespace Children | |
| Modules: | |
| Classes: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: 
          self,
          ::BasicSocket,
          ::IO
         | |
| Instance Chain: 
          self,
          ::BasicSocket,
          ::IO
         | |
| Inherits: | BasicSocket 
 | 
| Defined in: | ext/socket/socket.c, ext/socket/constdefs.c, ext/socket/ifaddr.c, ext/socket/lib/socket.rb | 
Overview
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 Constants are also defined under Socket.  For example, AF_INET is usable as well as Constants::AF_INET.  See 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:
type: The type of communications between the two endpoints, typically
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 broadcastwhich 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:
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', 80A 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
endA 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 doneException 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 .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.
Constant Summary
- 
    AF_APPLETALK =
    # File 'ext/socket/constdefs.c', line 2413AppleTalk protocol INTEGER2NUM(AF_APPLETALK) 
- 
    AF_ATM =
    # File 'ext/socket/constdefs.c', line 2737Asynchronous Transfer Mode INTEGER2NUM(AF_ATM) 
- 
    AF_AX25 =
    # File 'ext/socket/constdefs.c', line 2389AX.25 protocol INTEGER2NUM(AF_AX25) 
- 
    AF_CCITT =
    # File 'ext/socket/constdefs.c', line 2533CCITT (now ITU-T) protocols INTEGER2NUM(AF_CCITT) 
- 
    AF_CHAOS =
    # File 'ext/socket/constdefs.c', line 2461MIT CHAOS protocols INTEGER2NUM(AF_CHAOS) 
- 
    AF_CNT =
    # File 'ext/socket/constdefs.c', line 2641Computer Network Technology INTEGER2NUM(AF_CNT) 
- 
    AF_COIP =
    # File 'ext/socket/constdefs.c', line 2629Connection-oriented IP INTEGER2NUM(AF_COIP) 
- 
    AF_DATAKIT =
    # File 'ext/socket/constdefs.c', line 2521Datakit protocol INTEGER2NUM(AF_DATAKIT) 
- 
    AF_DEC =
    # File 'ext/socket/constdefs.c', line 2557DECnet protocol INTEGER2NUM(AF_DEC) 
- 
    AF_DLI =
    # File 'ext/socket/constdefs.c', line 2569DEC Direct ::Data Link Interface protocol INTEGER2NUM(AF_DLI) 
- 
    AF_E164 =
    # File 'ext/socket/constdefs.c', line 2785CCITT (ITU-T) E.164 recommendation INTEGER2NUM(AF_E164) 
- 
    AF_ECMA =
    # File 'ext/socket/constdefs.c', line 2509European Computer Manufacturers protocols INTEGER2NUM(AF_ECMA) 
- 
    AF_HYLINK =
    # File 'ext/socket/constdefs.c', line 2593NSC Hyperchannel protocol INTEGER2NUM(AF_HYLINK) 
- 
    AF_IMPLINK =
    # File 'ext/socket/constdefs.c', line 2437ARPANET IMP protocol INTEGER2NUM(AF_IMPLINK) 
- 
    AF_INET =
    # File 'ext/socket/constdefs.c', line 2349IPv4 protocol INTEGER2NUM(AF_INET) 
- 
    AF_INET6 =
    # File 'ext/socket/constdefs.c', line 2362IPv6 protocol INTEGER2NUM(AF_INET6) 
- 
    AF_IPX =
    # File 'ext/socket/constdefs.c', line 2401IPX protocol INTEGER2NUM(AF_IPX) 
- 
    AF_ISDN =
    # File 'ext/socket/constdefs.c', line 2677Integrated Services Digital Network INTEGER2NUM(AF_ISDN) 
- 
    AF_ISO =
    # File 'ext/socket/constdefs.c', line 2485ISO Open Systems Interconnection protocols INTEGER2NUM(AF_ISO) 
- 
    AF_LAT =
    # File 'ext/socket/constdefs.c', line 2581Local Area Transport protocol INTEGER2NUM(AF_LAT) 
- 
    AF_LINK =
    # File 'ext/socket/constdefs.c', line 2617Link layer interface INTEGER2NUM(AF_LINK) 
- 
    AF_LOCAL =
    # File 'ext/socket/constdefs.c', line 2425Host-internal protocols INTEGER2NUM(AF_LOCAL) 
- 
    AF_MAX =
    # File 'ext/socket/constdefs.c', line 2761Maximum address family for this platform INTEGER2NUM(AF_MAX) 
- 
    AF_NATM =
    # File 'ext/socket/constdefs.c', line 2689Native ATM access INTEGER2NUM(AF_NATM) 
- 
    AF_NDRV =
    # File 'ext/socket/constdefs.c', line 2665Network driver raw access INTEGER2NUM(AF_NDRV) 
- 
    AF_NETBIOS =
    # File 'ext/socket/constdefs.c', line 2713NetBIOS INTEGER2NUM(AF_NETBIOS) 
- 
    AF_NETGRAPH =
    # File 'ext/socket/constdefs.c', line 2749Netgraph sockets INTEGER2NUM(AF_NETGRAPH) 
- 
    AF_NS =
    # File 'ext/socket/constdefs.c', line 2473XEROX NS protocols INTEGER2NUM(AF_NS) 
- 
    AF_OSI =
    # File 'ext/socket/constdefs.c', line 2497ISO Open Systems Interconnection protocols INTEGER2NUM(AF_OSI) 
- 
    AF_PACKET =
    # File 'ext/socket/constdefs.c', line 2773Direct link-layer access INTEGER2NUM(AF_PACKET) 
- 
    AF_PPP =
    # File 'ext/socket/constdefs.c', line 2725Point-to-Point Protocol INTEGER2NUM(AF_PPP) 
- 
    AF_PUP =
    # File 'ext/socket/constdefs.c', line 2449PARC Universal Packet protocol INTEGER2NUM(AF_PUP) 
- 
    AF_ROUTE =
    # File 'ext/socket/constdefs.c', line 2605Internal routing protocol INTEGER2NUM(AF_ROUTE) 
- 
    AF_SIP =
    # File 'ext/socket/constdefs.c', line 2653Simple Internet Protocol INTEGER2NUM(AF_SIP) 
- 
    AF_SNA =
    # File 'ext/socket/constdefs.c', line 2545IBM SNA protocol INTEGER2NUM(AF_SNA) 
- 
    AF_SYSTEM =
    
 # File 'ext/socket/constdefs.c', line 2701INTEGER2NUM(AF_SYSTEM) 
- 
    AF_UNIX =
    # File 'ext/socket/constdefs.c', line 2377UNIX sockets INTEGER2NUM(AF_UNIX) 
- 
    AF_UNSPEC =
    # File 'ext/socket/constdefs.c', line 2337Unspecified protocol, any supported address family INTEGER2NUM(AF_UNSPEC) 
- 
    AI_ADDRCONFIG =
    # File 'ext/socket/constdefs.c', line 4207Accept only if any address is assigned INTEGER2NUM(AI_ADDRCONFIG) 
- 
    AI_ALL =
    # File 'ext/socket/constdefs.c', line 4195Allow all addresses INTEGER2NUM(AI_ALL) 
- 
    AI_CANONNAME =
    # File 'ext/socket/constdefs.c', line 4171Fill in the canonical name INTEGER2NUM(AI_CANONNAME) 
- 
    AI_DEFAULT =
    # File 'ext/socket/constdefs.c', line 4219Default flags for getaddrinfo INTEGER2NUM(AI_DEFAULT) 
- 
    AI_MASK =
    # File 'ext/socket/constdefs.c', line 4189Valid flag mask for getaddrinfo (not for application use) INTEGER2NUM(AI_MASK) 
- 
    AI_NUMERICHOST =
    # File 'ext/socket/constdefs.c', line 4177Prevent host name resolution INTEGER2NUM(AI_NUMERICHOST) 
- 
    AI_NUMERICSERV =
    # File 'ext/socket/constdefs.c', line 4183Prevent service name resolution INTEGER2NUM(AI_NUMERICSERV) 
- 
    AI_PASSIVE =
    # File 'ext/socket/constdefs.c', line 4165Get address to use with bind() INTEGER2NUM(AI_PASSIVE) 
- 
    AI_V4MAPPED =
    # File 'ext/socket/constdefs.c', line 4213Accept IPv4-mapped IPv6 addresses INTEGER2NUM(AI_V4MAPPED) 
- 
    AI_V4MAPPED_CFG =
    # File 'ext/socket/constdefs.c', line 4201Accept IPv4 mapped addresses if the kernel supports it INTEGER2NUM(AI_V4MAPPED_CFG) 
- 
    EAI_ADDRFAMILY =
    # File 'ext/socket/constdefs.c', line 4075Address family for hostname not supported INTEGER2NUM(EAI_ADDRFAMILY) 
- 
    EAI_AGAIN =
    # File 'ext/socket/constdefs.c', line 4081Temporary failure in name resolution INTEGER2NUM(EAI_AGAIN) 
- 
    EAI_BADFLAGS =
    # File 'ext/socket/constdefs.c', line 4087Invalid flags INTEGER2NUM(EAI_BADFLAGS) 
- 
    EAI_BADHINTS =
    # File 'ext/socket/constdefs.c', line 4147Invalid value for hints INTEGER2NUM(EAI_BADHINTS) 
- 
    EAI_FAIL =
    # File 'ext/socket/constdefs.c', line 4093Non-recoverable failure in name resolution INTEGER2NUM(EAI_FAIL) 
- 
    EAI_FAMILY =
    # File 'ext/socket/constdefs.c', line 4099Address family not supported INTEGER2NUM(EAI_FAMILY) 
- 
    EAI_MAX =
    # File 'ext/socket/constdefs.c', line 4159Maximum error code from getaddrinfo INTEGER2NUM(EAI_MAX) 
- 
    EAI_MEMORY =
    # File 'ext/socket/constdefs.c', line 4105Memory allocation failure INTEGER2NUM(EAI_MEMORY) 
- 
    EAI_NODATA =
    # File 'ext/socket/constdefs.c', line 4111No address associated with hostname INTEGER2NUM(EAI_NODATA) 
- 
    EAI_NONAME =
    # File 'ext/socket/constdefs.c', line 4117Hostname nor servname, or not known INTEGER2NUM(EAI_NONAME) 
- 
    EAI_OVERFLOW =
    # File 'ext/socket/constdefs.c', line 4123Argument buffer overflow INTEGER2NUM(EAI_OVERFLOW) 
- 
    EAI_PROTOCOL =
    # File 'ext/socket/constdefs.c', line 4153Resolved protocol is unknown INTEGER2NUM(EAI_PROTOCOL) 
- 
    EAI_SERVICE =
    # File 'ext/socket/constdefs.c', line 4129Servname not supported for socket type INTEGER2NUM(EAI_SERVICE) 
- 
    EAI_SOCKTYPE =
    # File 'ext/socket/constdefs.c', line 4135Sockettype not supportedINTEGER2NUM(EAI_SOCKTYPE) 
- 
    EAI_SYSTEM =
    # File 'ext/socket/constdefs.c', line 4141System error returned in errno INTEGER2NUM(EAI_SYSTEM) 
- 
    IFF_802_1Q_VLAN =
    # File 'ext/socket/constdefs.c', line 4603802.1Q VLAN device INTEGER2NUM(IFF_802_1Q_VLAN) 
- 
    IFF_ALLMULTI =
    # File 'ext/socket/constdefs.c', line 4609receive all multicast packets INTEGER2NUM(IFF_ALLMULTI) 
- 
    IFF_ALTPHYS =
    # File 'ext/socket/constdefs.c', line 4615use alternate physical connection INTEGER2NUM(IFF_ALTPHYS) 
- 
    IFF_AUTOMEDIA =
    # File 'ext/socket/constdefs.c', line 4621auto media select active INTEGER2NUM(IFF_AUTOMEDIA) 
- 
    IFF_BONDING =
    # File 'ext/socket/constdefs.c', line 4627bonding master or slave INTEGER2NUM(IFF_BONDING) 
- 
    IFF_BRIDGE_PORT =
    # File 'ext/socket/constdefs.c', line 4633device used as bridge port INTEGER2NUM(IFF_BRIDGE_PORT) 
- 
    IFF_BROADCAST =
    # File 'ext/socket/constdefs.c', line 4639broadcast address valid INTEGER2NUM(IFF_BROADCAST) 
- 
    IFF_CANTCHANGE =
    # File 'ext/socket/constdefs.c', line 4945flags not changeable INTEGER2NUM(IFF_CANTCHANGE) 
- 
    IFF_CANTCONFIG =
    # File 'ext/socket/constdefs.c', line 4645unconfigurable using ioctl(2) INTEGER2NUM(IFF_CANTCONFIG) 
- 
    IFF_DEBUG =
    # File 'ext/socket/constdefs.c', line 4651turn on debugging INTEGER2NUM(IFF_DEBUG) 
- 
    IFF_DISABLE_NETPOLL =
    # File 'ext/socket/constdefs.c', line 4657disable netpoll at run-time INTEGER2NUM(IFF_DISABLE_NETPOLL) 
- 
    IFF_DONT_BRIDGE =
    # File 'ext/socket/constdefs.c', line 4663disallow bridging this ether dev INTEGER2NUM(IFF_DONT_BRIDGE) 
- 
    IFF_DORMANT =
    # File 'ext/socket/constdefs.c', line 4669driver signals dormant INTEGER2NUM(IFF_DORMANT) 
- 
    IFF_DRV_OACTIVE =
    # File 'ext/socket/constdefs.c', line 4675tx hardware queue is full INTEGER2NUM(IFF_DRV_OACTIVE) 
- 
    IFF_DRV_RUNNING =
    # File 'ext/socket/constdefs.c', line 4681resources allocated INTEGER2NUM(IFF_DRV_RUNNING) 
- 
    IFF_DYING =
    # File 'ext/socket/constdefs.c', line 4687interface is winding down INTEGER2NUM(IFF_DYING) 
- 
    IFF_DYNAMIC =
    # File 'ext/socket/constdefs.c', line 4693dialup device with changing addresses INTEGER2NUM(IFF_DYNAMIC) 
- 
    IFF_EBRIDGE =
    # File 'ext/socket/constdefs.c', line 4699ethernet bridging device INTEGER2NUM(IFF_EBRIDGE) 
- 
    IFF_ECHO =
    # File 'ext/socket/constdefs.c', line 4705echo sent packets INTEGER2NUM(IFF_ECHO) 
- 
    IFF_ISATAP =
    # File 'ext/socket/constdefs.c', line 4711ISATAP interface (RFC4214) INTEGER2NUM(IFF_ISATAP) 
- 
    IFF_LINK0 =
    # File 'ext/socket/constdefs.c', line 4717per link layer defined bit 0 INTEGER2NUM(IFF_LINK0) 
- 
    IFF_LINK1 =
    # File 'ext/socket/constdefs.c', line 4723per link layer defined bit 1 INTEGER2NUM(IFF_LINK1) 
- 
    IFF_LINK2 =
    # File 'ext/socket/constdefs.c', line 4729per link layer defined bit 2 INTEGER2NUM(IFF_LINK2) 
- 
    IFF_LIVE_ADDR_CHANGE =
    # File 'ext/socket/constdefs.c', line 4735hardware address change when it's running INTEGER2NUM(IFF_LIVE_ADDR_CHANGE) 
- 
    IFF_LOOPBACK =
    # File 'ext/socket/constdefs.c', line 4741loopback net INTEGER2NUM(IFF_LOOPBACK) 
- 
    IFF_LOWER_UP =
    # File 'ext/socket/constdefs.c', line 4747driver signals L1 up INTEGER2NUM(IFF_LOWER_UP) 
- 
    IFF_MACVLAN_PORT =
    # File 'ext/socket/constdefs.c', line 4753device used as macvlan port INTEGER2NUM(IFF_MACVLAN_PORT) 
- 
    IFF_MASTER =
    # File 'ext/socket/constdefs.c', line 4759master of a load balancer INTEGER2NUM(IFF_MASTER) 
- 
    IFF_MASTER_8023AD =
    # File 'ext/socket/constdefs.c', line 4765bonding master, 802.3ad. INTEGER2NUM(IFF_MASTER_8023AD) 
- 
    IFF_MASTER_ALB =
    # File 'ext/socket/constdefs.c', line 4771bonding master, balance-alb. INTEGER2NUM(IFF_MASTER_ALB) 
- 
    IFF_MASTER_ARPMON =
    # File 'ext/socket/constdefs.c', line 4777bonding master, ARP mon in use INTEGER2NUM(IFF_MASTER_ARPMON) 
- 
    IFF_MONITOR =
    # File 'ext/socket/constdefs.c', line 4783user-requested monitor mode INTEGER2NUM(IFF_MONITOR) 
- 
    IFF_MULTICAST =
    # File 'ext/socket/constdefs.c', line 4789supports multicast INTEGER2NUM(IFF_MULTICAST) 
- 
    IFF_NOARP =
    # File 'ext/socket/constdefs.c', line 4795no address resolution protocol INTEGER2NUM(IFF_NOARP) 
- 
    IFF_NOTRAILERS =
    # File 'ext/socket/constdefs.c', line 4801avoid use of trailers INTEGER2NUM(IFF_NOTRAILERS) 
- 
    IFF_OACTIVE =
    # File 'ext/socket/constdefs.c', line 4807transmission in progress INTEGER2NUM(IFF_OACTIVE) 
- 
    IFF_OVS_DATAPATH =
    # File 'ext/socket/constdefs.c', line 4813device used as Open vSwitch datapath port INTEGER2NUM(IFF_OVS_DATAPATH) 
- 
    IFF_POINTOPOINT =
    # File 'ext/socket/constdefs.c', line 4819point-to-point link INTEGER2NUM(IFF_POINTOPOINT) 
- 
    IFF_PORTSEL =
    # File 'ext/socket/constdefs.c', line 4825can set media type INTEGER2NUM(IFF_PORTSEL) 
- 
    IFF_PPROMISC =
    # File 'ext/socket/constdefs.c', line 4831user-requested promisc mode INTEGER2NUM(IFF_PPROMISC) 
- 
    IFF_PROMISC =
    # File 'ext/socket/constdefs.c', line 4837receive all packets INTEGER2NUM(IFF_PROMISC) 
- 
    IFF_RENAMING =
    # File 'ext/socket/constdefs.c', line 4843interface is being renamed INTEGER2NUM(IFF_RENAMING) 
- 
    IFF_ROUTE =
    # File 'ext/socket/constdefs.c', line 4849routing entry installed INTEGER2NUM(IFF_ROUTE) 
- 
    IFF_RUNNING =
    # File 'ext/socket/constdefs.c', line 4855resources allocated INTEGER2NUM(IFF_RUNNING) 
- 
    IFF_SIMPLEX =
    # File 'ext/socket/constdefs.c', line 4861can't hear own transmissions INTEGER2NUM(IFF_SIMPLEX) 
- 
    IFF_SLAVE =
    # File 'ext/socket/constdefs.c', line 4867slave of a load balancer INTEGER2NUM(IFF_SLAVE) 
- 
    IFF_SLAVE_INACTIVE =
    # File 'ext/socket/constdefs.c', line 4873bonding slave not the curr. active INTEGER2NUM(IFF_SLAVE_INACTIVE) 
- 
    IFF_SLAVE_NEEDARP =
    # File 'ext/socket/constdefs.c', line 4879need ARPs for validation INTEGER2NUM(IFF_SLAVE_NEEDARP) 
- 
    IFF_SMART =
    # File 'ext/socket/constdefs.c', line 4885interface manages own routes INTEGER2NUM(IFF_SMART) 
- 
    IFF_STATICARP =
    # File 'ext/socket/constdefs.c', line 4891static ARP INTEGER2NUM(IFF_STATICARP) 
- 
    IFF_SUPP_NOFCS =
    # File 'ext/socket/constdefs.c', line 4897sending custom FCS INTEGER2NUM(IFF_SUPP_NOFCS) 
- 
    IFF_TEAM_PORT =
    # File 'ext/socket/constdefs.c', line 4903used as team port INTEGER2NUM(IFF_TEAM_PORT) 
- 
    IFF_TX_SKB_SHARING =
    # File 'ext/socket/constdefs.c', line 4909sharing skbs on transmit INTEGER2NUM(IFF_TX_SKB_SHARING) 
- 
    IFF_UNICAST_FLT =
    # File 'ext/socket/constdefs.c', line 4915unicast filtering INTEGER2NUM(IFF_UNICAST_FLT) 
- 
    IFF_UP =
    # File 'ext/socket/constdefs.c', line 4921interface is up INTEGER2NUM(IFF_UP) 
- 
    IFF_VOLATILE =
    # File 'ext/socket/constdefs.c', line 4939volatile flags INTEGER2NUM(IFF_VOLATILE) 
- 
    IFF_WAN_HDLC =
    # File 'ext/socket/constdefs.c', line 4927WAN HDLC device INTEGER2NUM(IFF_WAN_HDLC) 
- 
    IFF_XMIT_DST_RELEASE =
    # File 'ext/socket/constdefs.c', line 4933dev_hard_start_xmit() is allowed to release skb->dst INTEGER2NUM(IFF_XMIT_DST_RELEASE) 
- 
    IFNAMSIZ =
    # File 'ext/socket/constdefs.c', line 4513Maximum interface name size INTEGER2NUM(IFNAMSIZ) 
- 
    IF_NAMESIZE =
    # File 'ext/socket/constdefs.c', line 4519Maximum interface name size INTEGER2NUM(IF_NAMESIZE) 
- 
    INADDR_ALLHOSTS_GROUP =
    # File 'ext/socket/constdefs.c', line 3193Multicast group for all systems on this subset INTEGER2NUM(INADDR_ALLHOSTS_GROUP) 
- 
    INADDR_ANY =
    # File 'ext/socket/constdefs.c', line 3169A socket bound to INADDR_ANYreceives packets from all interfaces and sends from the default IP addressINTEGER2NUM(INADDR_ANY) 
- 
    INADDR_BROADCAST =
    # File 'ext/socket/constdefs.c', line 3175The network broadcast address INTEGER2NUM(INADDR_BROADCAST) 
- 
    INADDR_LOOPBACK =
    # File 'ext/socket/constdefs.c', line 3181The loopback address INTEGER2NUM(INADDR_LOOPBACK) 
- 
    INADDR_MAX_LOCAL_GROUP =
    # File 'ext/socket/constdefs.c', line 3199The last local network multicast group INTEGER2NUM(INADDR_MAX_LOCAL_GROUP) 
- 
    INADDR_NONE =
    # File 'ext/socket/constdefs.c', line 3205A bitmask for matching no valid IP address INTEGER2NUM(INADDR_NONE) 
- 
    INADDR_UNSPEC_GROUP =
    # File 'ext/socket/constdefs.c', line 3187The reserved multicast group INTEGER2NUM(INADDR_UNSPEC_GROUP) 
- 
    INET6_ADDRSTRLEN =
    # File 'ext/socket/constdefs.c', line 4507Maximum length of an IPv6 address string INTEGER2NUM(INET6_ADDRSTRLEN) 
- 
    INET_ADDRSTRLEN =
    # File 'ext/socket/constdefs.c', line 4501Maximum length of an IPv4 address string INTEGER2NUM(INET_ADDRSTRLEN) 
- 
    IPPORT_RESERVED =
    # File 'ext/socket/constdefs.c', line 3157Default minimum address for bind or connect INTEGER2NUM(IPPORT_RESERVED) 
- 
    IPPORT_USERRESERVED =
    # File 'ext/socket/constdefs.c', line 3163Default maximum address for bind or connect INTEGER2NUM(IPPORT_USERRESERVED) 
- 
    IPPROTO_AH =
    # File 'ext/socket/constdefs.c', line 3091IP6 auth header INTEGER2NUM(IPPROTO_AH) 
- 
    IPPROTO_BIP =
    
 # File 'ext/socket/constdefs.c', line 3085INTEGER2NUM(IPPROTO_BIP) 
- 
    IPPROTO_DSTOPTS =
    # File 'ext/socket/constdefs.c', line 3097IP6 destination option INTEGER2NUM(IPPROTO_DSTOPTS) 
- 
    IPPROTO_EGP =
    # File 'ext/socket/constdefs.c', line 3031Exterior Gateway Protocol INTEGER2NUM(IPPROTO_EGP) 
- 
    IPPROTO_EON =
    # File 'ext/socket/constdefs.c', line 3079ISO cnlp INTEGER2NUM(IPPROTO_EON) 
- 
    IPPROTO_ESP =
    # File 'ext/socket/constdefs.c', line 3103IP6 Encapsulated Security Payload INTEGER2NUM(IPPROTO_ESP) 
- 
    IPPROTO_FRAGMENT =
    # File 'ext/socket/constdefs.c', line 3109IP6 fragmentation header INTEGER2NUM(IPPROTO_FRAGMENT) 
- 
    IPPROTO_GGP =
    # File 'ext/socket/constdefs.c', line 3019Gateway to Gateway Protocol INTEGER2NUM(IPPROTO_GGP) 
- 
    IPPROTO_HELLO =
    # File 'ext/socket/constdefs.c', line 3055“hello” routing protocol INTEGER2NUM(IPPROTO_HELLO) 
- 
    IPPROTO_HOPOPTS =
    # File 'ext/socket/constdefs.c', line 3115IP6 hop-by-hop options INTEGER2NUM(IPPROTO_HOPOPTS) 
- 
    IPPROTO_ICMP =
    # File 'ext/socket/constdefs.c', line 3007Control message protocol INTEGER2NUM(IPPROTO_ICMP) 
- 
    IPPROTO_ICMPV6 =
    # File 'ext/socket/constdefs.c', line 3121ICMP6 INTEGER2NUM(IPPROTO_ICMPV6) 
- 
    IPPROTO_IDP =
    # File 'ext/socket/constdefs.c', line 3049XNS IDP INTEGER2NUM(IPPROTO_IDP) 
- 
    IPPROTO_IGMP =
    # File 'ext/socket/constdefs.c', line 3013Group Management Protocol INTEGER2NUM(IPPROTO_IGMP) 
- 
    IPPROTO_IP =
    # File 'ext/socket/constdefs.c', line 3001Dummy protocol for IP INTEGER2NUM(IPPROTO_IP) 
- 
    IPPROTO_IPV6 =
    # File 'ext/socket/constdefs.c', line 3127IP6 header INTEGER2NUM(IPPROTO_IPV6) 
- 
    IPPROTO_MAX =
    # File 'ext/socket/constdefs.c', line 3151Maximum IPPROTO constant INTEGER2NUM(IPPROTO_MAX) 
- 
    IPPROTO_ND =
    # File 'ext/socket/constdefs.c', line 3061Sun net disk protocol INTEGER2NUM(IPPROTO_ND) 
- 
    IPPROTO_NONE =
    # File 'ext/socket/constdefs.c', line 3133IP6 no next header INTEGER2NUM(IPPROTO_NONE) 
- 
    IPPROTO_PUP =
    # File 'ext/socket/constdefs.c', line 3037PARC Universal Packet protocol INTEGER2NUM(IPPROTO_PUP) 
- 
    IPPROTO_RAW =
    # File 'ext/socket/constdefs.c', line 3145Raw IP packet INTEGER2NUM(IPPROTO_RAW) 
- 
    IPPROTO_ROUTING =
    # File 'ext/socket/constdefs.c', line 3139IP6 routing header INTEGER2NUM(IPPROTO_ROUTING) 
- 
    IPPROTO_TCP =
    # File 'ext/socket/constdefs.c', line 3025TCP INTEGER2NUM(IPPROTO_TCP) 
- 
    IPPROTO_TP =
    # File 'ext/socket/constdefs.c', line 3067ISO transport protocol class 4 INTEGER2NUM(IPPROTO_TP) 
- 
    IPPROTO_UDP =
    # File 'ext/socket/constdefs.c', line 3043UDP INTEGER2NUM(IPPROTO_UDP) 
- 
    IPPROTO_XTP =
    # File 'ext/socket/constdefs.c', line 3073Xpress Transport Protocol INTEGER2NUM(IPPROTO_XTP) 
- 
    IPV6_CHECKSUM =
    # File 'ext/socket/constdefs.c', line 4342Checksum offset for raw sockets INTEGER2NUM(IPV6_CHECKSUM) 
- 
    IPV6_DONTFRAG =
    # File 'ext/socket/constdefs.c', line 4350Don't fragment packets INTEGER2NUM(IPV6_DONTFRAG) 
- 
    IPV6_DSTOPTS =
    # File 'ext/socket/constdefs.c', line 4358Destination option INTEGER2NUM(IPV6_DSTOPTS) 
- 
    IPV6_HOPLIMIT =
    # File 'ext/socket/constdefs.c', line 4366Hop limit INTEGER2NUM(IPV6_HOPLIMIT) 
- 
    IPV6_HOPOPTS =
    # File 'ext/socket/constdefs.c', line 4374Hop-by-hop option INTEGER2NUM(IPV6_HOPOPTS) 
- 
    IPV6_JOIN_GROUP =
    # File 'ext/socket/constdefs.c', line 4286Join a group membership INTEGER2NUM(IPV6_JOIN_GROUP) 
- 
    IPV6_LEAVE_GROUP =
    # File 'ext/socket/constdefs.c', line 4294Leave a group membership INTEGER2NUM(IPV6_LEAVE_GROUP) 
- 
    IPV6_MULTICAST_HOPS =
    # File 'ext/socket/constdefs.c', line 4302IP6 multicast hops INTEGER2NUM(IPV6_MULTICAST_HOPS) 
- 
    IPV6_MULTICAST_IF =
    # File 'ext/socket/constdefs.c', line 4310IP6 multicast interface INTEGER2NUM(IPV6_MULTICAST_IF) 
- 
    IPV6_MULTICAST_LOOP =
    # File 'ext/socket/constdefs.c', line 4318IP6 multicast loopback INTEGER2NUM(IPV6_MULTICAST_LOOP) 
- 
    IPV6_NEXTHOP =
    # File 'ext/socket/constdefs.c', line 4382Next hop address INTEGER2NUM(IPV6_NEXTHOP) 
- 
    IPV6_PATHMTU =
    # File 'ext/socket/constdefs.c', line 4390Retrieve current path MTU INTEGER2NUM(IPV6_PATHMTU) 
- 
    IPV6_PKTINFO =
    # File 'ext/socket/constdefs.c', line 4398Receive packet information with datagram INTEGER2NUM(IPV6_PKTINFO) 
- 
    IPV6_RECVDSTOPTS =
    # File 'ext/socket/constdefs.c', line 4406Receive all IP6 options for response INTEGER2NUM(IPV6_RECVDSTOPTS) 
- 
    IPV6_RECVHOPLIMIT =
    # File 'ext/socket/constdefs.c', line 4414Receive hop limit with datagram INTEGER2NUM(IPV6_RECVHOPLIMIT) 
- 
    IPV6_RECVHOPOPTS =
    # File 'ext/socket/constdefs.c', line 4422Receive hop-by-hop options INTEGER2NUM(IPV6_RECVHOPOPTS) 
- 
    IPV6_RECVPATHMTU =
    # File 'ext/socket/constdefs.c', line 4478Receive current path MTU with datagram INTEGER2NUM(IPV6_RECVPATHMTU) 
- 
    IPV6_RECVPKTINFO =
    # File 'ext/socket/constdefs.c', line 4430Receive destination IP address and incoming interface INTEGER2NUM(IPV6_RECVPKTINFO) 
- 
    IPV6_RECVRTHDR =
    # File 'ext/socket/constdefs.c', line 4438Receive routing header INTEGER2NUM(IPV6_RECVRTHDR) 
- 
    IPV6_RECVTCLASS =
    # File 'ext/socket/constdefs.c', line 4446Receive traffic class INTEGER2NUM(IPV6_RECVTCLASS) 
- 
    IPV6_RTHDR =
    # File 'ext/socket/constdefs.c', line 4454Allows removal of sticky routing headers INTEGER2NUM(IPV6_RTHDR) 
- 
    IPV6_RTHDRDSTOPTS =
    # File 'ext/socket/constdefs.c', line 4462Allows removal of sticky destination options header INTEGER2NUM(IPV6_RTHDRDSTOPTS) 
- 
    IPV6_RTHDR_TYPE_0 =
    # File 'ext/socket/constdefs.c', line 4470Routing header type 0 INTEGER2NUM(IPV6_RTHDR_TYPE_0) 
- 
    IPV6_TCLASS =
    # File 'ext/socket/constdefs.c', line 4486Specify the traffic class INTEGER2NUM(IPV6_TCLASS) 
- 
    IPV6_UNICAST_HOPS =
    # File 'ext/socket/constdefs.c', line 4326IP6 unicast hops INTEGER2NUM(IPV6_UNICAST_HOPS) 
- 
    IPV6_USE_MIN_MTU =
    # File 'ext/socket/constdefs.c', line 4494Use the minimum MTU size INTEGER2NUM(IPV6_USE_MIN_MTU) 
- 
    IPV6_V6ONLY =
    # File 'ext/socket/constdefs.c', line 4334Only bind IPv6 with a wildcard bind INTEGER2NUM(IPV6_V6ONLY) 
- 
    IPX_TYPE =
    
 # File 'ext/socket/constdefs.c', line 3907INTEGER2NUM(IPX_TYPE) 
- 
    IP_ADD_MEMBERSHIP =
    # File 'ext/socket/constdefs.c', line 3325Add a multicast group membership INTEGER2NUM(IP_ADD_MEMBERSHIP) 
- 
    IP_ADD_SOURCE_MEMBERSHIP =
    # File 'ext/socket/constdefs.c', line 3457Add a multicast group membership INTEGER2NUM(IP_ADD_SOURCE_MEMBERSHIP) 
- 
    IP_BLOCK_SOURCE =
    # File 'ext/socket/constdefs.c', line 3451Block IPv4 multicast packets with a give source address INTEGER2NUM(IP_BLOCK_SOURCE) 
- 
    IP_DEFAULT_MULTICAST_LOOP =
    # File 'ext/socket/constdefs.c', line 3343Default multicast loopback INTEGER2NUM(IP_DEFAULT_MULTICAST_LOOP) 
- 
    IP_DEFAULT_MULTICAST_TTL =
    # File 'ext/socket/constdefs.c', line 3337Default multicast TTL INTEGER2NUM(IP_DEFAULT_MULTICAST_TTL) 
- 
    IP_DONTFRAG =
    # File 'ext/socket/constdefs.c', line 3265Don't fragment packets INTEGER2NUM(IP_DONTFRAG) 
- 
    IP_DROP_MEMBERSHIP =
    # File 'ext/socket/constdefs.c', line 3331Drop a multicast group membership INTEGER2NUM(IP_DROP_MEMBERSHIP) 
- 
    IP_DROP_SOURCE_MEMBERSHIP =
    # File 'ext/socket/constdefs.c', line 3463Drop a multicast group membership INTEGER2NUM(IP_DROP_SOURCE_MEMBERSHIP) 
- 
    IP_FREEBIND =
    # File 'ext/socket/constdefs.c', line 3397Allow binding to nonexistent IP addresses INTEGER2NUM(IP_FREEBIND) 
- 
    IP_HDRINCL =
    # File 'ext/socket/constdefs.c', line 3217Header is included with data INTEGER2NUM(IP_HDRINCL) 
- 
    IP_IPSEC_POLICY =
    # File 'ext/socket/constdefs.c', line 3403IPsec security policy INTEGER2NUM(IP_IPSEC_POLICY) 
- 
    IP_MAX_MEMBERSHIPS =
    # File 'ext/socket/constdefs.c', line 3349Maximum number multicast groups a socket can join INTEGER2NUM(IP_MAX_MEMBERSHIPS) 
- 
    IP_MINTTL =
    # File 'ext/socket/constdefs.c', line 3259Minimum TTL allowed for received packets INTEGER2NUM(IP_MINTTL) 
- 
    IP_MSFILTER =
    # File 'ext/socket/constdefs.c', line 3469Multicast source filtering INTEGER2NUM(IP_MSFILTER) 
- 
    IP_MTU =
    # File 'ext/socket/constdefs.c', line 3391The Maximum Transmission Unit of the socket INTEGER2NUM(IP_MTU) 
- 
    IP_MTU_DISCOVER =
    # File 'ext/socket/constdefs.c', line 3373Path MTU discovery INTEGER2NUM(IP_MTU_DISCOVER) 
- 
    IP_MULTICAST_IF =
    # File 'ext/socket/constdefs.c', line 3307IP multicast interface INTEGER2NUM(IP_MULTICAST_IF) 
- 
    IP_MULTICAST_LOOP =
    # File 'ext/socket/constdefs.c', line 3319IP multicast loopback INTEGER2NUM(IP_MULTICAST_LOOP) 
- 
    IP_MULTICAST_TTL =
    # File 'ext/socket/constdefs.c', line 3313IP multicast TTL INTEGER2NUM(IP_MULTICAST_TTL) 
- 
    IP_ONESBCAST =
    # File 'ext/socket/constdefs.c', line 3277Force outgoing broadcast datagrams to have the undirected broadcast address INTEGER2NUM(IP_ONESBCAST) 
- 
    IP_OPTIONS =
    # File 'ext/socket/constdefs.c', line 3211IP options to be included in packets INTEGER2NUM(IP_OPTIONS) 
- 
    IP_PASSSEC =
    # File 'ext/socket/constdefs.c', line 3415Retrieve security context with datagram INTEGER2NUM(IP_PASSSEC) 
- 
    IP_PKTINFO =
    # File 'ext/socket/constdefs.c', line 3361Receive packet information with datagrams INTEGER2NUM(IP_PKTINFO) 
- 
    IP_PKTOPTIONS =
    # File 'ext/socket/constdefs.c', line 3367Receive packet options with datagrams INTEGER2NUM(IP_PKTOPTIONS) 
- 
    IP_PMTUDISC_DO =
    # File 'ext/socket/constdefs.c', line 3439Always send DF frames INTEGER2NUM(IP_PMTUDISC_DO) 
- 
    IP_PMTUDISC_DONT =
    # File 'ext/socket/constdefs.c', line 3427Never send DF frames INTEGER2NUM(IP_PMTUDISC_DONT) 
- 
    IP_PMTUDISC_WANT =
    # File 'ext/socket/constdefs.c', line 3433Use per-route hints INTEGER2NUM(IP_PMTUDISC_WANT) 
- 
    IP_PORTRANGE =
    # File 'ext/socket/constdefs.c', line 3301Set the port range for sockets with unspecified port numbers INTEGER2NUM(IP_PORTRANGE) 
- 
    IP_RECVDSTADDR =
    # File 'ext/socket/constdefs.c', line 3247Receive IP destination address with datagram INTEGER2NUM(IP_RECVDSTADDR) 
- 
    IP_RECVERR =
    # File 'ext/socket/constdefs.c', line 3379Enable extended reliable error message passing INTEGER2NUM(IP_RECVERR) 
- 
    IP_RECVIF =
    # File 'ext/socket/constdefs.c', line 3289Receive interface information with datagrams INTEGER2NUM(IP_RECVIF) 
- 
    IP_RECVOPTS =
    # File 'ext/socket/constdefs.c', line 3235Receive all IP options with datagram INTEGER2NUM(IP_RECVOPTS) 
- 
    IP_RECVRETOPTS =
    # File 'ext/socket/constdefs.c', line 3241Receive all IP options for response INTEGER2NUM(IP_RECVRETOPTS) 
- 
    IP_RECVSLLA =
    # File 'ext/socket/constdefs.c', line 3295Receive link-layer address with datagrams INTEGER2NUM(IP_RECVSLLA) 
- 
    IP_RECVTOS =
    # File 'ext/socket/constdefs.c', line 3385Receive TOS with incoming packets INTEGER2NUM(IP_RECVTOS) 
- 
    IP_RECVTTL =
    # File 'ext/socket/constdefs.c', line 3283Receive IP TTL with datagrams INTEGER2NUM(IP_RECVTTL) 
- 
    IP_RETOPTS =
    # File 'ext/socket/constdefs.c', line 3253IP options to be included in datagrams INTEGER2NUM(IP_RETOPTS) 
- 
    IP_ROUTER_ALERT =
    # File 'ext/socket/constdefs.c', line 3355Notify transit routers to more closely examine the contents of an IP packet INTEGER2NUM(IP_ROUTER_ALERT) 
- 
    IP_SENDSRCADDR =
    # File 'ext/socket/constdefs.c', line 3271Source address for outgoing UDP datagrams INTEGER2NUM(IP_SENDSRCADDR) 
- 
    IP_TOS =
    # File 'ext/socket/constdefs.c', line 3223IP type-of-service INTEGER2NUM(IP_TOS) 
- 
    IP_TRANSPARENT =
    # File 'ext/socket/constdefs.c', line 3421Transparent proxy INTEGER2NUM(IP_TRANSPARENT) 
- 
    IP_TTL =
    # File 'ext/socket/constdefs.c', line 3229IP time-to-live INTEGER2NUM(IP_TTL) 
- 
    IP_UNBLOCK_SOURCE =
    # File 'ext/socket/constdefs.c', line 3445Unblock IPv4 multicast packets with a give source address INTEGER2NUM(IP_UNBLOCK_SOURCE) 
- 
    IP_XFRM_POLICY =
    
 # File 'ext/socket/constdefs.c', line 3409INTEGER2NUM(IP_XFRM_POLICY) 
- 
    LOCAL_CONNWAIT =
    # File 'ext/socket/constdefs.c', line 4597Connect blocks until accepted INTEGER2NUM(LOCAL_CONNWAIT) 
- 
    LOCAL_CREDS =
    # File 'ext/socket/constdefs.c', line 4591Pass credentials to receiver INTEGER2NUM(LOCAL_CREDS) 
- 
    LOCAL_PEERCRED =
    # File 'ext/socket/constdefs.c', line 4585Retrieve peer credentials INTEGER2NUM(LOCAL_PEERCRED) 
- 
    MCAST_BLOCK_SOURCE =
    # File 'ext/socket/constdefs.c', line 3481Block multicast packets from this source INTEGER2NUM(MCAST_BLOCK_SOURCE) 
- 
    MCAST_EXCLUDE =
    # File 'ext/socket/constdefs.c', line 3517Exclusive multicast source filter INTEGER2NUM(MCAST_EXCLUDE) 
- 
    MCAST_INCLUDE =
    # File 'ext/socket/constdefs.c', line 3523Inclusive multicast source filter INTEGER2NUM(MCAST_INCLUDE) 
- 
    MCAST_JOIN_GROUP =
    # File 'ext/socket/constdefs.c', line 3475Join a multicast group INTEGER2NUM(MCAST_JOIN_GROUP) 
- 
    MCAST_JOIN_SOURCE_GROUP =
    # File 'ext/socket/constdefs.c', line 3499Join a multicast source group INTEGER2NUM(MCAST_JOIN_SOURCE_GROUP) 
- 
    MCAST_LEAVE_GROUP =
    # File 'ext/socket/constdefs.c', line 3493Leave a multicast group INTEGER2NUM(MCAST_LEAVE_GROUP) 
- 
    MCAST_LEAVE_SOURCE_GROUP =
    # File 'ext/socket/constdefs.c', line 3505Leave a multicast source group INTEGER2NUM(MCAST_LEAVE_SOURCE_GROUP) 
- 
    MCAST_MSFILTER =
    # File 'ext/socket/constdefs.c', line 3511Multicast source filtering INTEGER2NUM(MCAST_MSFILTER) 
- 
    MCAST_UNBLOCK_SOURCE =
    # File 'ext/socket/constdefs.c', line 3487Unblock multicast packets from this source INTEGER2NUM(MCAST_UNBLOCK_SOURCE) 
- 
    MSG_COMPAT =
    # File 'ext/socket/constdefs.c', line 2899End of record INTEGER2NUM(MSG_COMPAT) 
- 
    MSG_CONFIRM =
    # File 'ext/socket/constdefs.c', line 2923Confirm path validity INTEGER2NUM(MSG_CONFIRM) 
- 
    MSG_CTRUNC =
    # File 'ext/socket/constdefs.c', line 2845Control data lost before delivery INTEGER2NUM(MSG_CTRUNC) 
- 
    MSG_DONTROUTE =
    # File 'ext/socket/constdefs.c', line 2827Send without using the routing tables INTEGER2NUM(MSG_DONTROUTE) 
- 
    MSG_DONTWAIT =
    # File 'ext/socket/constdefs.c', line 2857This message should be non-blocking INTEGER2NUM(MSG_DONTWAIT) 
- 
    MSG_EOF =
    # File 'ext/socket/constdefs.c', line 2863::Data completes connection INTEGER2NUM(MSG_EOF) 
- 
    MSG_EOR =
    # File 'ext/socket/constdefs.c', line 2833::Data completes record INTEGER2NUM(MSG_EOR) 
- 
    MSG_ERRQUEUE =
    # File 'ext/socket/constdefs.c', line 2935Fetch message from error queue INTEGER2NUM(MSG_ERRQUEUE) 
- 
    MSG_FASTOPEN =
    # File 'ext/socket/constdefs.c', line 2953Reduce step of the handshake process INTEGER2NUM(MSG_FASTOPEN) 
- 
    MSG_FIN =
    
 # File 'ext/socket/constdefs.c', line 2911INTEGER2NUM(MSG_FIN) 
- 
    MSG_FLUSH =
    # File 'ext/socket/constdefs.c', line 2869Start of a hold sequence. Dumps to so_temp INTEGER2NUM(MSG_FLUSH) 
- 
    MSG_HAVEMORE =
    # File 'ext/socket/constdefs.c', line 2887::Data ready to be read INTEGER2NUM(MSG_HAVEMORE) 
- 
    MSG_HOLD =
    # File 'ext/socket/constdefs.c', line 2875Hold fragment in so_temp INTEGER2NUM(MSG_HOLD) 
- 
    MSG_MORE =
    # File 'ext/socket/constdefs.c', line 2947Sender will send more INTEGER2NUM(MSG_MORE) 
- 
    MSG_NOSIGNAL =
    # File 'ext/socket/constdefs.c', line 2941Do not generate SIGPIPE INTEGER2NUM(MSG_NOSIGNAL) 
- 
    MSG_OOB =
    # File 'ext/socket/constdefs.c', line 2815Process out-of-band data INTEGER2NUM(MSG_OOB) 
- 
    MSG_PEEK =
    # File 'ext/socket/constdefs.c', line 2821Peek at incoming message INTEGER2NUM(MSG_PEEK) 
- 
    MSG_PROXY =
    # File 'ext/socket/constdefs.c', line 2905Wait for full request INTEGER2NUM(MSG_PROXY) 
- 
    MSG_RCVMORE =
    # File 'ext/socket/constdefs.c', line 2893::Data remains in the current packet INTEGER2NUM(MSG_RCVMORE) 
- 
    MSG_RST =
    
 # File 'ext/socket/constdefs.c', line 2929INTEGER2NUM(MSG_RST) 
- 
    MSG_SEND =
    # File 'ext/socket/constdefs.c', line 2881Send the packet in so_temp INTEGER2NUM(MSG_SEND) 
- 
    MSG_SYN =
    
 # File 'ext/socket/constdefs.c', line 2917INTEGER2NUM(MSG_SYN) 
- 
    MSG_TRUNC =
    # File 'ext/socket/constdefs.c', line 2839::Data discarded before delivery INTEGER2NUM(MSG_TRUNC) 
- 
    MSG_WAITALL =
    # File 'ext/socket/constdefs.c', line 2851Wait for full request or error INTEGER2NUM(MSG_WAITALL) 
- 
    NI_DGRAM =
    # File 'ext/socket/constdefs.c', line 4261The service specified is a datagram service (looks up UDP ports) INTEGER2NUM(NI_DGRAM) 
- 
    NI_MAXHOST =
    # File 'ext/socket/constdefs.c', line 4225Maximum length of a hostname INTEGER2NUM(NI_MAXHOST) 
- 
    NI_MAXSERV =
    # File 'ext/socket/constdefs.c', line 4231Maximum length of a service name INTEGER2NUM(NI_MAXSERV) 
- 
    NI_NAMEREQD =
    # File 'ext/socket/constdefs.c', line 4249A name is required INTEGER2NUM(NI_NAMEREQD) 
- 
    NI_NOFQDN =
    # File 'ext/socket/constdefs.c', line 4237An FQDN is not required for local hosts, return only the local part INTEGER2NUM(NI_NOFQDN) 
- 
    NI_NUMERICHOST =
    # File 'ext/socket/constdefs.c', line 4243Return a numeric address INTEGER2NUM(NI_NUMERICHOST) 
- 
    NI_NUMERICSERV =
    # File 'ext/socket/constdefs.c', line 4255Return the service name as a digit string INTEGER2NUM(NI_NUMERICSERV) 
- 
    PF_APPLETALK =
    # File 'ext/socket/constdefs.c', line 2419AppleTalk protocol INTEGER2NUM(PF_APPLETALK) 
- 
    PF_ATM =
    # File 'ext/socket/constdefs.c', line 2743Asynchronous Transfer Mode INTEGER2NUM(PF_ATM) 
- 
    PF_AX25 =
    # File 'ext/socket/constdefs.c', line 2395AX.25 protocol INTEGER2NUM(PF_AX25) 
- 
    PF_CCITT =
    # File 'ext/socket/constdefs.c', line 2539CCITT (now ITU-T) protocols INTEGER2NUM(PF_CCITT) 
- 
    PF_CHAOS =
    # File 'ext/socket/constdefs.c', line 2467MIT CHAOS protocols INTEGER2NUM(PF_CHAOS) 
- 
    PF_CNT =
    # File 'ext/socket/constdefs.c', line 2647Computer Network Technology INTEGER2NUM(PF_CNT) 
- 
    PF_COIP =
    # File 'ext/socket/constdefs.c', line 2635Connection-oriented IP INTEGER2NUM(PF_COIP) 
- 
    PF_DATAKIT =
    # File 'ext/socket/constdefs.c', line 2527Datakit protocol INTEGER2NUM(PF_DATAKIT) 
- 
    PF_DEC =
    # File 'ext/socket/constdefs.c', line 2563DECnet protocol INTEGER2NUM(PF_DEC) 
- 
    PF_DLI =
    # File 'ext/socket/constdefs.c', line 2575DEC Direct ::Data Link Interface protocol INTEGER2NUM(PF_DLI) 
- 
    PF_ECMA =
    # File 'ext/socket/constdefs.c', line 2515European Computer Manufacturers protocols INTEGER2NUM(PF_ECMA) 
- 
    PF_HYLINK =
    # File 'ext/socket/constdefs.c', line 2599NSC Hyperchannel protocol INTEGER2NUM(PF_HYLINK) 
- 
    PF_IMPLINK =
    # File 'ext/socket/constdefs.c', line 2443ARPANET IMP protocol INTEGER2NUM(PF_IMPLINK) 
- 
    PF_INET =
    # File 'ext/socket/constdefs.c', line 2355IPv4 protocol INTEGER2NUM(PF_INET) 
- 
    PF_INET6 =
    # File 'ext/socket/constdefs.c', line 2370IPv6 protocol INTEGER2NUM(PF_INET6) 
- 
    PF_IPX =
    # File 'ext/socket/constdefs.c', line 2407IPX protocol INTEGER2NUM(PF_IPX) 
- 
    PF_ISDN =
    # File 'ext/socket/constdefs.c', line 2683Integrated Services Digital Network INTEGER2NUM(PF_ISDN) 
- 
    PF_ISO =
    # File 'ext/socket/constdefs.c', line 2491ISO Open Systems Interconnection protocols INTEGER2NUM(PF_ISO) 
- 
    PF_KEY =
    
 # File 'ext/socket/constdefs.c', line 2809INTEGER2NUM(PF_KEY) 
- 
    PF_LAT =
    # File 'ext/socket/constdefs.c', line 2587Local Area Transport protocol INTEGER2NUM(PF_LAT) 
- 
    PF_LINK =
    # File 'ext/socket/constdefs.c', line 2623Link layer interface INTEGER2NUM(PF_LINK) 
- 
    PF_LOCAL =
    # File 'ext/socket/constdefs.c', line 2431Host-internal protocols INTEGER2NUM(PF_LOCAL) 
- 
    PF_MAX =
    # File 'ext/socket/constdefs.c', line 2767Maximum address family for this platform INTEGER2NUM(PF_MAX) 
- 
    PF_NATM =
    # File 'ext/socket/constdefs.c', line 2695Native ATM access INTEGER2NUM(PF_NATM) 
- 
    PF_NDRV =
    # File 'ext/socket/constdefs.c', line 2671Network driver raw access INTEGER2NUM(PF_NDRV) 
- 
    PF_NETBIOS =
    # File 'ext/socket/constdefs.c', line 2719NetBIOS INTEGER2NUM(PF_NETBIOS) 
- 
    PF_NETGRAPH =
    # File 'ext/socket/constdefs.c', line 2755Netgraph sockets INTEGER2NUM(PF_NETGRAPH) 
- 
    PF_NS =
    # File 'ext/socket/constdefs.c', line 2479XEROX NS protocols INTEGER2NUM(PF_NS) 
- 
    PF_OSI =
    # File 'ext/socket/constdefs.c', line 2503ISO Open Systems Interconnection protocols INTEGER2NUM(PF_OSI) 
- 
    PF_PACKET =
    # File 'ext/socket/constdefs.c', line 2779Direct link-layer access INTEGER2NUM(PF_PACKET) 
- 
    PF_PIP =
    
 # File 'ext/socket/constdefs.c', line 2803INTEGER2NUM(PF_PIP) 
- 
    PF_PPP =
    # File 'ext/socket/constdefs.c', line 2731Point-to-Point Protocol INTEGER2NUM(PF_PPP) 
- 
    PF_PUP =
    # File 'ext/socket/constdefs.c', line 2455PARC Universal Packet protocol INTEGER2NUM(PF_PUP) 
- 
    PF_ROUTE =
    # File 'ext/socket/constdefs.c', line 2611Internal routing protocol INTEGER2NUM(PF_ROUTE) 
- 
    PF_RTIP =
    
 # File 'ext/socket/constdefs.c', line 2797INTEGER2NUM(PF_RTIP) 
- 
    PF_SIP =
    # File 'ext/socket/constdefs.c', line 2659Simple Internet Protocol INTEGER2NUM(PF_SIP) 
- 
    PF_SNA =
    # File 'ext/socket/constdefs.c', line 2551IBM SNA protocol INTEGER2NUM(PF_SNA) 
- 
    PF_SYSTEM =
    
 # File 'ext/socket/constdefs.c', line 2707INTEGER2NUM(PF_SYSTEM) 
- 
    PF_UNIX =
    # File 'ext/socket/constdefs.c', line 2383UNIX sockets INTEGER2NUM(PF_UNIX) 
- 
    PF_UNSPEC =
    # File 'ext/socket/constdefs.c', line 2343Unspecified protocol, any supported address family INTEGER2NUM(PF_UNSPEC) 
- 
    PF_XTP =
    # File 'ext/socket/constdefs.c', line 2791eXpress Transfer Protocol INTEGER2NUM(PF_XTP) 
- 
    SCM_BINTIME =
    # File 'ext/socket/constdefs.c', line 4555Timestamp (bintime) INTEGER2NUM(SCM_BINTIME) 
- 
    SCM_CREDENTIALS =
    # File 'ext/socket/constdefs.c', line 4561The sender's credentials INTEGER2NUM(SCM_CREDENTIALS) 
- 
    SCM_CREDS =
    # File 'ext/socket/constdefs.c', line 4567Process credentials INTEGER2NUM(SCM_CREDS) 
- 
    SCM_RIGHTS =
    # File 'ext/socket/constdefs.c', line 4531Access rights INTEGER2NUM(SCM_RIGHTS) 
- 
    SCM_TIMESTAMP =
    # File 'ext/socket/constdefs.c', line 4537Timestamp (timeval) INTEGER2NUM(SCM_TIMESTAMP) 
- 
    SCM_TIMESTAMPING =
    # File 'ext/socket/constdefs.c', line 4549Timestamp (timespec list) (Linux 2.6.30) INTEGER2NUM(SCM_TIMESTAMPING) 
- 
    SCM_TIMESTAMPNS =
    # File 'ext/socket/constdefs.c', line 4543Timespec (timespec) INTEGER2NUM(SCM_TIMESTAMPNS) 
- 
    SCM_UCRED =
    # File 'ext/socket/constdefs.c', line 4573User credentials INTEGER2NUM(SCM_UCRED) 
- 
    SCM_WIFI_STATUS =
    # File 'ext/socket/constdefs.c', line 4579Wifi status (Linux 3.3) INTEGER2NUM(SCM_WIFI_STATUS) 
- 
    SHUT_RD =
    # File 'ext/socket/constdefs.c', line 4267Shut down the reading side of the socket INTEGER2NUM(SHUT_RD) 
- 
    SHUT_RDWR =
    # File 'ext/socket/constdefs.c', line 4279Shut down the both sides of the socket INTEGER2NUM(SHUT_RDWR) 
- 
    SHUT_WR =
    # File 'ext/socket/constdefs.c', line 4273Shut down the writing side of the socket INTEGER2NUM(SHUT_WR) 
- 
    SOCK_DGRAM =
    # File 'ext/socket/constdefs.c', line 2307A datagram socket provides connectionless, unreliable messaging INTEGER2NUM(SOCK_DGRAM) 
- 
    SOCK_PACKET =
    # File 'ext/socket/constdefs.c', line 2331Device-level packet access INTEGER2NUM(SOCK_PACKET) 
- 
    SOCK_RAW =
    # File 'ext/socket/constdefs.c', line 2313A raw socket provides low-level access for direct access or implementing network protocols INTEGER2NUM(SOCK_RAW) 
- 
    SOCK_RDM =
    # File 'ext/socket/constdefs.c', line 2319A reliable datagram socket provides reliable delivery of messages INTEGER2NUM(SOCK_RDM) 
- 
    SOCK_SEQPACKET =
    # File 'ext/socket/constdefs.c', line 2325A sequential packet socket provides sequenced, reliable two-way connection for datagrams INTEGER2NUM(SOCK_SEQPACKET) 
- 
    SOCK_STREAM =
    # File 'ext/socket/constdefs.c', line 2301A stream socket provides a sequenced, reliable two-way connection for a byte stream INTEGER2NUM(SOCK_STREAM) 
- 
    SOL_ATALK =
    # File 'ext/socket/constdefs.c', line 2983AppleTalk socket options INTEGER2NUM(SOL_ATALK) 
- 
    SOL_AX25 =
    # File 'ext/socket/constdefs.c', line 2977AX.25 socket options INTEGER2NUM(SOL_AX25) 
- 
    SOL_IP =
    # File 'ext/socket/constdefs.c', line 2965IP socket options INTEGER2NUM(SOL_IP) 
- 
    SOL_IPX =
    # File 'ext/socket/constdefs.c', line 2971IPX socket options INTEGER2NUM(SOL_IPX) 
- 
    SOL_SOCKET =
    # File 'ext/socket/constdefs.c', line 2959Socket-level options INTEGER2NUM(SOL_SOCKET) 
- 
    SOL_TCP =
    # File 'ext/socket/constdefs.c', line 2989TCP socket options INTEGER2NUM(SOL_TCP) 
- 
    SOL_UDP =
    # File 'ext/socket/constdefs.c', line 2995UDP socket options INTEGER2NUM(SOL_UDP) 
- 
    SOMAXCONN =
    # File 'ext/socket/constdefs.c', line 4525Maximum connection requests that may be queued for a socket INTEGER2NUM(SOMAXCONN) 
- 
    SOPRI_BACKGROUND =
    # File 'ext/socket/constdefs.c', line 3901Background socket priority INTEGER2NUM(SOPRI_BACKGROUND) 
- 
    SOPRI_INTERACTIVE =
    # File 'ext/socket/constdefs.c', line 3889Interactive socket priority INTEGER2NUM(SOPRI_INTERACTIVE) 
- 
    SOPRI_NORMAL =
    # File 'ext/socket/constdefs.c', line 3895Normal socket priority INTEGER2NUM(SOPRI_NORMAL) 
- 
    SO_ACCEPTCONN =
    # File 'ext/socket/constdefs.c', line 3661Sockethas had listen() called on itINTEGER2NUM(SO_ACCEPTCONN) 
- 
    SO_ACCEPTFILTER =
    # File 'ext/socket/constdefs.c', line 3673There is an accept filter INTEGER2NUM(SO_ACCEPTFILTER) 
- 
    SO_ALLZONES =
    # File 'ext/socket/constdefs.c', line 3793Bypass zone boundaries INTEGER2NUM(SO_ALLZONES) 
- 
    SO_ATTACH_FILTER =
    # File 'ext/socket/constdefs.c', line 3739Attach an accept filter INTEGER2NUM(SO_ATTACH_FILTER) 
- 
    SO_BINDTODEVICE =
    # File 'ext/socket/constdefs.c', line 3733Only send packets from the given interface INTEGER2NUM(SO_BINDTODEVICE) 
- 
    SO_BINTIME =
    # File 'ext/socket/constdefs.c', line 3775Receive timestamp with datagrams (bintime) INTEGER2NUM(SO_BINTIME) 
- 
    SO_BPF_EXTENSIONS =
    # File 'ext/socket/constdefs.c', line 3883Query supported BPF extensions (Linux 3.14) INTEGER2NUM(SO_BPF_EXTENSIONS) 
- 
    SO_BROADCAST =
    # File 'ext/socket/constdefs.c', line 3565Permit sending of broadcast messages INTEGER2NUM(SO_BROADCAST) 
- 
    SO_BUSY_POLL =
    # File 'ext/socket/constdefs.c', line 3871Set the threshold in microseconds for low latency polling (Linux 3.11) INTEGER2NUM(SO_BUSY_POLL) 
- 
    SO_DEBUG =
    # File 'ext/socket/constdefs.c', line 3529Debug info recording INTEGER2NUM(SO_DEBUG) 
- 
    SO_DETACH_FILTER =
    # File 'ext/socket/constdefs.c', line 3745Detach an accept filter INTEGER2NUM(SO_DETACH_FILTER) 
- 
    SO_DOMAIN =
    # File 'ext/socket/constdefs.c', line 3829Domain given for socket() (Linux 2.6.32) INTEGER2NUM(SO_DOMAIN) 
- 
    SO_DONTROUTE =
    # File 'ext/socket/constdefs.c', line 3559Use interface addresses INTEGER2NUM(SO_DONTROUTE) 
- 
    SO_DONTTRUNC =
    # File 'ext/socket/constdefs.c', line 3679Retain unread data INTEGER2NUM(SO_DONTTRUNC) 
- 
    SO_ERROR =
    # File 'ext/socket/constdefs.c', line 3553Get and clear the error status INTEGER2NUM(SO_ERROR) 
- 
    SO_GET_FILTER =
    # File 'ext/socket/constdefs.c', line 3751Obtain filter set by SO_ATTACH_FILTER (Linux 3.8) INTEGER2NUM(SO_GET_FILTER) 
- 
    SO_KEEPALIVE =
    # File 'ext/socket/constdefs.c', line 3595Keep connections alive INTEGER2NUM(SO_KEEPALIVE) 
- 
    SO_LINGER =
    # File 'ext/socket/constdefs.c', line 3619Linger on close if data is present INTEGER2NUM(SO_LINGER) 
- 
    SO_LOCK_FILTER =
    # File 'ext/socket/constdefs.c', line 3859Lock the filter attached to a socket (Linux 3.9) INTEGER2NUM(SO_LOCK_FILTER) 
- 
    SO_MAC_EXEMPT =
    # File 'ext/socket/constdefs.c', line 3787Mandatory Access Control exemption for unlabeled peers INTEGER2NUM(SO_MAC_EXEMPT) 
- 
    SO_MARK =
    # File 'ext/socket/constdefs.c', line 3811Set the mark for mark-based routing (Linux 2.6.25) INTEGER2NUM(SO_MARK) 
- 
    SO_MAX_PACING_RATE =
    # File 'ext/socket/constdefs.c', line 3877Cap the rate computed by transport layer. [bytes per second] (Linux 3.13) INTEGER2NUM(SO_MAX_PACING_RATE) 
- 
    SO_NKE =
    # File 'ext/socket/constdefs.c', line 3703Install socket-level Network Kernel Extension INTEGER2NUM(SO_NKE) 
- 
    SO_NOFCS =
    # File 'ext/socket/constdefs.c', line 3853Set netns of a socket (Linux 3.4) INTEGER2NUM(SO_NOFCS) 
- 
    SO_NOSIGPIPE =
    # File 'ext/socket/constdefs.c', line 3709Don't SIGPIPE on EPIPE INTEGER2NUM(SO_NOSIGPIPE) 
- 
    SO_NO_CHECK =
    # File 'ext/socket/constdefs.c', line 3607Disable checksums INTEGER2NUM(SO_NO_CHECK) 
- 
    SO_NREAD =
    # File 'ext/socket/constdefs.c', line 3697Get first packet byte count INTEGER2NUM(SO_NREAD) 
- 
    SO_OOBINLINE =
    # File 'ext/socket/constdefs.c', line 3601Leave received out-of-band data in-line INTEGER2NUM(SO_OOBINLINE) 
- 
    SO_PASSCRED =
    # File 'ext/socket/constdefs.c', line 3625Receive SCM_CREDENTIALS messages INTEGER2NUM(SO_PASSCRED) 
- 
    SO_PASSSEC =
    # File 'ext/socket/constdefs.c', line 3805Toggle security context passing (Linux 2.6.18) INTEGER2NUM(SO_PASSSEC) 
- 
    SO_PEEK_OFF =
    # File 'ext/socket/constdefs.c', line 3847Set the peek offset (Linux 3.4) INTEGER2NUM(SO_PEEK_OFF) 
- 
    SO_PEERCRED =
    # File 'ext/socket/constdefs.c', line 3631The credentials of the foreign process connected to this socket INTEGER2NUM(SO_PEERCRED) 
- 
    SO_PEERNAME =
    # File 'ext/socket/constdefs.c', line 3757Name of the connecting user INTEGER2NUM(SO_PEERNAME) 
- 
    SO_PEERSEC =
    # File 'ext/socket/constdefs.c', line 3799Obtain the security credentials (Linux 2.6.2) INTEGER2NUM(SO_PEERSEC) 
- 
    SO_PRIORITY =
    # File 'ext/socket/constdefs.c', line 3613The protocol-defined priority for all packets on this socket INTEGER2NUM(SO_PRIORITY) 
- 
    SO_PROTOCOL =
    # File 'ext/socket/constdefs.c', line 3823Protocol given for socket() (Linux 2.6.32) INTEGER2NUM(SO_PROTOCOL) 
- 
    SO_RCVBUF =
    # File 'ext/socket/constdefs.c', line 3577Receive buffer size INTEGER2NUM(SO_RCVBUF) 
- 
    SO_RCVBUFFORCE =
    # File 'ext/socket/constdefs.c', line 3589Receive buffer size without rmem_max limit (Linux 2.6.14) INTEGER2NUM(SO_RCVBUFFORCE) 
- 
    SO_RCVLOWAT =
    # File 'ext/socket/constdefs.c', line 3637Receive low-water mark INTEGER2NUM(SO_RCVLOWAT) 
- 
    SO_RCVTIMEO =
    # File 'ext/socket/constdefs.c', line 3649Receive timeout INTEGER2NUM(SO_RCVTIMEO) 
- 
    SO_RECVUCRED =
    # File 'ext/socket/constdefs.c', line 3781Receive user credentials with datagram INTEGER2NUM(SO_RECVUCRED) 
- 
    SO_REUSEADDR =
    # File 'ext/socket/constdefs.c', line 3535Allow local address reuse INTEGER2NUM(SO_REUSEADDR) 
- 
    SO_REUSEPORT =
    # File 'ext/socket/constdefs.c', line 3541Allow local address and port reuse INTEGER2NUM(SO_REUSEPORT) 
- 
    SO_RXQ_OVFL =
    # File 'ext/socket/constdefs.c', line 3835Toggle cmsg for number of packets dropped (Linux 2.6.33) INTEGER2NUM(SO_RXQ_OVFL) 
- 
    SO_SECURITY_AUTHENTICATION =
    
 # File 'ext/socket/constdefs.c', line 3715INTEGER2NUM(SO_SECURITY_AUTHENTICATION) 
- 
    SO_SECURITY_ENCRYPTION_NETWORK =
    
 # File 'ext/socket/constdefs.c', line 3727INTEGER2NUM(SO_SECURITY_ENCRYPTION_NETWORK) 
- 
    SO_SECURITY_ENCRYPTION_TRANSPORT =
    
 # File 'ext/socket/constdefs.c', line 3721INTEGER2NUM(SO_SECURITY_ENCRYPTION_TRANSPORT) 
- 
    SO_SELECT_ERR_QUEUE =
    # File 'ext/socket/constdefs.c', line 3865Make select() detect socket error queue with errorfds (Linux 3.10) INTEGER2NUM(SO_SELECT_ERR_QUEUE) 
- 
    SO_SNDBUF =
    # File 'ext/socket/constdefs.c', line 3571Send buffer size INTEGER2NUM(SO_SNDBUF) 
- 
    SO_SNDBUFFORCE =
    # File 'ext/socket/constdefs.c', line 3583Send buffer size without wmem_max limit (Linux 2.6.14) INTEGER2NUM(SO_SNDBUFFORCE) 
- 
    SO_SNDLOWAT =
    # File 'ext/socket/constdefs.c', line 3643Send low-water mark INTEGER2NUM(SO_SNDLOWAT) 
- 
    SO_SNDTIMEO =
    # File 'ext/socket/constdefs.c', line 3655Send timeout INTEGER2NUM(SO_SNDTIMEO) 
- 
    SO_TIMESTAMP =
    # File 'ext/socket/constdefs.c', line 3763Receive timestamp with datagrams (timeval) INTEGER2NUM(SO_TIMESTAMP) 
- 
    SO_TIMESTAMPING =
    # File 'ext/socket/constdefs.c', line 3817Time stamping of incoming and outgoing packets (Linux 2.6.30) INTEGER2NUM(SO_TIMESTAMPING) 
- 
    SO_TIMESTAMPNS =
    # File 'ext/socket/constdefs.c', line 3769Receive nanosecond timestamp with datagrams (timespec) INTEGER2NUM(SO_TIMESTAMPNS) 
- 
    SO_TYPE =
    # File 'ext/socket/constdefs.c', line 3547Get the socket type INTEGER2NUM(SO_TYPE) 
- 
    SO_USELOOPBACK =
    # File 'ext/socket/constdefs.c', line 3667Bypass hardware when possible INTEGER2NUM(SO_USELOOPBACK) 
- 
    SO_WANTMORE =
    # File 'ext/socket/constdefs.c', line 3685Give a hint when more data is ready INTEGER2NUM(SO_WANTMORE) 
- 
    SO_WANTOOBFLAG =
    # File 'ext/socket/constdefs.c', line 3691OOB data is wanted in MSG_FLAG on receive INTEGER2NUM(SO_WANTOOBFLAG) 
- 
    SO_WIFI_STATUS =
    # File 'ext/socket/constdefs.c', line 3841Toggle cmsg for wifi status (Linux 3.3) INTEGER2NUM(SO_WIFI_STATUS) 
- 
    TCP_CONGESTION =
    # File 'ext/socket/constdefs.c', line 4009TCP congestion control algorithm (Linux 2.6.13, glibc 2.6) INTEGER2NUM(TCP_CONGESTION) 
- 
    TCP_COOKIE_TRANSACTIONS =
    # File 'ext/socket/constdefs.c', line 4015TCP Cookie Transactions (Linux 2.6.33, glibc 2.18) INTEGER2NUM(TCP_COOKIE_TRANSACTIONS) 
- 
    TCP_CORK =
    # File 'ext/socket/constdefs.c', line 3925Don't send partial frames (Linux 2.2, glibc 2.2) INTEGER2NUM(TCP_CORK) 
- 
    TCP_DEFER_ACCEPT =
    # File 'ext/socket/constdefs.c', line 3931Don't notify a listening socket until data is ready (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_DEFER_ACCEPT) 
- 
    TCP_FASTOPEN =
    # File 'ext/socket/constdefs.c', line 4003Reduce step of the handshake process (Linux 3.7, glibc 2.18) INTEGER2NUM(TCP_FASTOPEN) 
- 
    TCP_INFO =
    # File 'ext/socket/constdefs.c', line 3937Retrieve information about this socket (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_INFO) 
- 
    TCP_KEEPCNT =
    # File 'ext/socket/constdefs.c', line 3943Maximum number of keepalive probes allowed before dropping a connection (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_KEEPCNT) 
- 
    TCP_KEEPIDLE =
    # File 'ext/socket/constdefs.c', line 3949Idle time before keepalive probes are sent (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_KEEPIDLE) 
- 
    TCP_KEEPINTVL =
    # File 'ext/socket/constdefs.c', line 3955Time between keepalive probes (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_KEEPINTVL) 
- 
    TCP_LINGER2 =
    # File 'ext/socket/constdefs.c', line 3961Lifetime of orphaned FIN_WAIT2 sockets (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_LINGER2) 
- 
    TCP_MAXSEG =
    # File 'ext/socket/constdefs.c', line 3919Set maximum segment size INTEGER2NUM(TCP_MAXSEG) 
- 
    TCP_MD5SIG =
    # File 'ext/socket/constdefs.c', line 3967Use MD5 digests (RFC2385, Linux 2.6.20, glibc 2.7) INTEGER2NUM(TCP_MD5SIG) 
- 
    TCP_NODELAY =
    # File 'ext/socket/constdefs.c', line 3913Don't delay sending to coalesce packets INTEGER2NUM(TCP_NODELAY) 
- 
    TCP_NOOPT =
    # File 'ext/socket/constdefs.c', line 3973Don't use TCP options INTEGER2NUM(TCP_NOOPT) 
- 
    TCP_NOPUSH =
    # File 'ext/socket/constdefs.c', line 3979Don't push the last block of write INTEGER2NUM(TCP_NOPUSH) 
- 
    TCP_QUEUE_SEQ =
    # File 'ext/socket/constdefs.c', line 4021Sequence of a queue for repair mode (Linux 3.5, glibc 2.18) INTEGER2NUM(TCP_QUEUE_SEQ) 
- 
    TCP_QUICKACK =
    # File 'ext/socket/constdefs.c', line 3985Enable quickack mode (Linux 2.4.4, glibc 2.3) INTEGER2NUM(TCP_QUICKACK) 
- 
    TCP_REPAIR =
    # File 'ext/socket/constdefs.c', line 4027Repair mode (Linux 3.5, glibc 2.18) INTEGER2NUM(TCP_REPAIR) 
- 
    TCP_REPAIR_OPTIONS =
    # File 'ext/socket/constdefs.c', line 4033Options for repair mode (Linux 3.5, glibc 2.18) INTEGER2NUM(TCP_REPAIR_OPTIONS) 
- 
    TCP_REPAIR_QUEUE =
    # File 'ext/socket/constdefs.c', line 4039Queue for repair mode (Linux 3.5, glibc 2.18) INTEGER2NUM(TCP_REPAIR_QUEUE) 
- 
    TCP_SYNCNT =
    # File 'ext/socket/constdefs.c', line 3991Number of SYN retransmits before a connection is dropped (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_SYNCNT) 
- 
    TCP_THIN_DUPACK =
    # File 'ext/socket/constdefs.c', line 4045Duplicated acknowledgments handling for thin-streams (Linux 2.6.34, glibc 2.18) INTEGER2NUM(TCP_THIN_DUPACK) 
- 
    TCP_THIN_LINEAR_TIMEOUTS =
    # File 'ext/socket/constdefs.c', line 4051Linear timeouts for thin-streams (Linux 2.6.34, glibc 2.18) INTEGER2NUM(TCP_THIN_LINEAR_TIMEOUTS) 
- 
    TCP_TIMESTAMP =
    # File 'ext/socket/constdefs.c', line 4057TCP timestamp (Linux 3.9, glibc 2.18) INTEGER2NUM(TCP_TIMESTAMP) 
- 
    TCP_USER_TIMEOUT =
    # File 'ext/socket/constdefs.c', line 4063Max timeout before a TCP connection is aborted (Linux 2.6.37, glibc 2.18) INTEGER2NUM(TCP_USER_TIMEOUT) 
- 
    TCP_WINDOW_CLAMP =
    # File 'ext/socket/constdefs.c', line 3997Clamp the size of the advertised window (Linux 2.4, glibc 2.2) INTEGER2NUM(TCP_WINDOW_CLAMP) 
- 
    UDP_CORK =
    # File 'ext/socket/constdefs.c', line 4069Don't send partial frames (Linux 2.5.44, glibc 2.11) INTEGER2NUM(UDP_CORK) 
Class Attribute Summary
::BasicSocket - Inherited
| .do_not_reverse_lookup | Gets the global do_not_reverse_lookup flag. | 
| .do_not_reverse_lookup= | Sets the global do_not_reverse_lookup flag. | 
Class Method Summary
- 
    
      .accept_loop(*sockets)  
    
    yield socket and client address for each a connection accepted via given sockets. 
- 
    
      .getaddrinfo(nodename, servname[, family[, socktype[, protocol[, flags[, reverse_lookup]]]]])  ⇒ Array 
    
    Obtains address information for nodename:servname. 
- 
    
      .gethostbyaddr(address_string [, address_family])  ⇒ hostent 
    
    Obtains the host information for address. 
- 
    
      .gethostbyname(hostname)  ⇒ Array, ... 
    
    Obtains the host information for hostname. 
- 
    
      .gethostname  ⇒ hostname 
    
    Returns the hostname. 
- 
    
      .getifaddrs  ⇒ Array, ... 
    
    Returns an array of interface addresses. 
- 
    
      .getnameinfo(sockaddr [, flags])  ⇒ Array, servicename 
    
    Obtains name information for sockaddr. 
- 
    
      .getservbyname(service_name)  ⇒ port_number 
    
    Obtains the port number for service_name. 
- 
    
      .getservbyport(port [, protocol_name])  ⇒ service 
    
    Obtains the port number for port. 
- 
    
      .ip_address_list  ⇒ Array 
    
    Returns local IP addresses as an array. 
- 
    
      .new(domain, socktype [, protocol])  ⇒ Socket 
    
    constructor
    Creates a new socket object. 
- 
    
      .pack_sockaddr_in(port, host)  ⇒ sockaddr 
    
    Alias for .sockaddr_in. 
- 
    
      .pack_sockaddr_un(path)  ⇒ sockaddr 
    
    Alias for .sockaddr_un. 
- 
    
      .pair(domain, type, protocol)  ⇒ Socket 
      (also: .socketpair)
    
    Creates a pair of sockets connected each other. 
- 
    
      .sockaddr_in(port, host)  ⇒ sockaddr 
      (also: .pack_sockaddr_in)
    
    Packs port and host as an AF_INET/AF_INET6 sockaddr string. 
- 
    
      .sockaddr_un(path)  ⇒ sockaddr 
      (also: .pack_sockaddr_un)
    
    Packs path as an AF_UNIX sockaddr string. 
- 
    
      .socketpair(domain, type, protocol)  ⇒ Socket 
    
    Alias for .pair. 
- 
    
      .tcp(host, port, local_host = nil, local_port = nil, [opts]) {|socket| ... } 
    
    creates a new socket object connected to host:port using TCP/IP. 
- 
    
      .tcp_server_loop(host = nil, port, &b)  
    
    creates a TCP/IP server on port and calls the block for each connection accepted. 
- 
    
      .tcp_server_sockets(host = nil, port)  
    
    creates TCP/IP server sockets for host and port. 
- 
    
      .udp_server_loop(port) {|msg, msg_src| ... } 
    
    creates a UDP/IP server on port and calls the block for each message arrived. 
- 
    
      .udp_server_loop_on(sockets) {|msg, msg_src| ... } 
    
    Run UDP/IP server loop on the given sockets. 
- 
    
      .udp_server_recv(sockets) {|msg, msg_src| ... } 
    
    Receive UDP/IP packets from the given sockets. 
- 
    
      .udp_server_sockets([host, ] port)  
    
    Creates UDP/IP sockets for a UDP server. 
- 
    
      .unix(path)  
    
    creates a new socket connected to path using UNIX socket socket. 
- 
    
      .unix_server_loop(path, &b)  
    
    creates a UNIX socket server on path. 
- 
    
      .unix_server_socket(path)  
    
    creates a UNIX server socket on path. 
- 
    
      .unpack_sockaddr_in(sockaddr)  ⇒ Array, ip_address 
    
    Unpacks sockaddr into port and ip_address. 
- 
    
      .unpack_sockaddr_un(sockaddr)  ⇒ path 
    
    Unpacks sockaddr into path. 
- .unix_socket_abstract_name?(path) ⇒ Boolean private
::BasicSocket - Inherited
| .for_fd | Returns a socket object which contains the file descriptor, fd. | 
Instance Attribute Summary
::BasicSocket - Inherited
| #do_not_reverse_lookup | Gets the do_not_reverse_lookup flag of basicsocket. | 
| #do_not_reverse_lookup= | Sets the do_not_reverse_lookup flag of basicsocket. | 
Instance Method Summary
- 
    
      #accept  ⇒ Socket, client_addrinfo 
    
    Accepts a next connection. 
- 
    
      #accept_nonblock([options])  ⇒ Socket, client_addrinfo 
    
    Accepts an incoming connection using accept(2) after O_NONBLOCK is set for the underlying file descriptor. 
- 
    
      #bind(local_sockaddr)  ⇒ 0 
    
    Binds to the given local address. 
- 
    
      #connect(remote_sockaddr)  ⇒ 0 
    
    Requests a connection to be made on the given remote_sockaddr.
- 
    
      #connect_nonblock(remote_sockaddr, [options])  ⇒ 0 
    
    Requests a connection to be made on the given remote_sockaddrafter O_NONBLOCK is set for the underlying file descriptor.
- 
    
      #ipv6only!  
    
    enable the socket option IPV6_V6ONLY if IPV6_V6ONLY is available. 
- 
    
      #listen(int)  ⇒ 0 
    
    Listens for connections, using the specified intas the backlog.
- 
    
      #recvfrom(maxlen)  ⇒ Array, sender_addrinfo 
    
    Receives up to maxlen bytes from socket.
- 
    
      #recvfrom_nonblock(maxlen[, flags[, outbuf[, opts]]])  ⇒ Array, sender_addrinfo 
    
    Receives up to maxlen bytes from socketusing recvfrom(2) after O_NONBLOCK is set for the underlying file descriptor.
- 
    
      #sysaccept  ⇒ Socket, 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. 
::BasicSocket - Inherited
| #close_read | Disallows further read using shutdown system call. | 
| #close_write | Disallows further write using shutdown system call. | 
| #connect_address | Returns an address of the socket suitable for connect in the local machine. | 
| #getpeereid | Returns the user and group on the peer of the UNIX socket. | 
| #getpeername | Returns the remote address of the socket as a sockaddr string. | 
| #getsockname | Returns the local address of the socket as a sockaddr string. | 
| #getsockopt | Gets a socket option. | 
| #local_address | Returns an ::Addrinfo object for local address obtained by getsockname. | 
| #recv | Receives a message. | 
| #recv_nonblock | Receives up to maxlen bytes from  | 
| #recvmsg | recvmsg receives a message using recvmsg(2) system call in blocking manner. | 
| #recvmsg_nonblock | recvmsg receives a message using recvmsg(2) system call in non-blocking manner. | 
| #remote_address | Returns an ::Addrinfo object for remote address obtained by getpeername. | 
| #send | send mesg via basicsocket. | 
| #sendmsg | sendmsg sends a message using sendmsg(2) system call in blocking manner. | 
| #sendmsg_nonblock | sendmsg_nonblock sends a message using sendmsg(2) system call in non-blocking manner. | 
| #setsockopt | Sets a socket option. | 
| #shutdown | Calls shutdown(2) system call. | 
| #__recvmsg, #__recvmsg_nonblock, #__sendmsg, #__sendmsg_nonblock | |
Constructor Details
    .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 socketClass Method Details
.accept_loop(*sockets)
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.
# File 'ext/socket/lib/socket.rb', line 794
def self.accept_loop(*sockets) # :yield: socket, client_addrinfo sockets.flatten!(1) if sockets.empty? raise ArgumentError, "no sockets" end loop { readable, _, _ = IO.select(sockets) readable.each {|r| sock, addr = r.accept_nonblock(exception: false) next if sock == :wait_readable yield sock, addr } } end
    .getaddrinfo(nodename, servname[, family[, socktype[, protocol[, flags[, reverse_lookup]]]]])  ⇒ Array   
Obtains address information for nodename:servname.
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_IPreverse_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 same as numeric address.
nil:              obey to the current do_not_reverse_lookup flag.If Addrinfo object is preferred, use Addrinfo.getaddrinfo.
    .gethostbyaddr(address_string [, address_family])  ⇒ hostent   
Obtains the host information for address.
p Socket.gethostbyaddr([221,186,184,68].pack("CCCC"))
#=> ["carbon.ruby-lang.org", [], 2, "\xDD\xBA\xB8D"]
    .gethostbyname(hostname)  ⇒ Array, ...   
Obtains the host information for hostname.
p Socket.gethostbyname("hal") #=> ["localhost", ["hal"], 2, "\x7F\x00\x00\x01"]
    .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 .ip_address_list.
    .getifaddrs  ⇒ Array, ...   
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)>]
    .getnameinfo(sockaddr [, flags])  ⇒ Array, 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.
    
      .getservbyname(service_name)  ⇒ port_number 
      .getservbyname(service_name, protocol_name)  ⇒ port_number 
    
  
port_number 
      .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
    .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"
    .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>,
     #...]
    
      .sockaddr_in(port, host)  ⇒ sockaddr 
      .pack_sockaddr_in(port, host)  ⇒ sockaddr 
    
  
sockaddr 
      .pack_sockaddr_in(port, host)  ⇒ sockaddr 
    Alias for .sockaddr_in.
    
      .sockaddr_un(path)  ⇒ sockaddr 
      .pack_sockaddr_un(path)  ⇒ sockaddr 
    
  
sockaddr 
      .pack_sockaddr_un(path)  ⇒ sockaddr 
    Alias for .sockaddr_un.
    
      .pair(domain, type, protocol)  ⇒ Socket 
      .socketpair(domain, type, protocol)  ⇒ Socket 
    
    Also known as: .socketpair
  
Socket 
      .socketpair(domain, type, protocol)  ⇒ Socket 
    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"
    
      .sockaddr_in(port, host)  ⇒ sockaddr 
      .pack_sockaddr_in(port, host)  ⇒ sockaddr 
    
    Also known as: .pack_sockaddr_in
  
sockaddr 
      .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"
    
      .sockaddr_un(path)  ⇒ sockaddr 
      .pack_sockaddr_un(path)  ⇒ sockaddr 
    
    Also known as: .pack_sockaddr_un
  
sockaddr 
      .pack_sockaddr_un(path)  ⇒ sockaddr 
    Packs path as an AF_UNIX sockaddr string.
Socket.sockaddr_un("/tmp/sock") #=> "\x01\x00/tmp/sock\x00\x00..."
    
      .pair(domain, type, protocol)  ⇒ Socket 
      .socketpair(domain, type, protocol)  ⇒ Socket 
    
  
Socket 
      .socketpair(domain, type, protocol)  ⇒ Socket 
    Alias for .pair.
    
      .tcp(host, port, local_host = nil, local_port = nil, [opts]) {|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. 
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
}# File 'ext/socket/lib/socket.rb', line 612
def self.tcp(host, port, *rest) # :yield: socket opts = Hash === rest.last ? rest.pop : {} raise ArgumentError, "wrong number of arguments (#{rest.length} for 2)" if 2 < rest.length local_host, local_port = rest last_error = nil ret = nil connect_timeout = opts[:connect_timeout] local_addr_list = nil if local_host != nil || local_port != nil local_addr_list = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, nil) end Addrinfo.foreach(host, port, nil, :STREAM) {|ai| if local_addr_list local_addr = local_addr_list.find {|local_ai| local_ai.afamily == ai.afamily } next if !local_addr else local_addr = nil end begin sock = local_addr ? ai.connect_from(local_addr, :timeout => connect_timeout) : ai.connect(:timeout => connect_timeout) rescue SystemCallError last_error = $! next end ret = sock break } if !ret if last_error raise last_error else raise SocketError, "no appropriate local address" end end if block_given? begin yield ret ensure ret.close if !ret.closed? end else ret end end
.tcp_server_loop(host = nil, port, &b)
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. 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
  }
}# File 'ext/socket/lib/socket.rb', line 850
def self.tcp_server_loop(host=nil, port, &b) # :yield: socket, client_addrinfo tcp_server_sockets(host, port) {|sockets| accept_loop(sockets, &b) } end
.tcp_server_sockets(host = nil, port)
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>]
}# File 'ext/socket/lib/socket.rb', line 750
def self.tcp_server_sockets(host=nil, port) if port == 0 sockets = tcp_server_sockets_port0(host) else last_error = nil sockets = [] begin Addrinfo.foreach(host, port, nil, :STREAM, nil, Socket::AI_PASSIVE) {|ai| begin s = ai.listen rescue SystemCallError last_error = $! next end sockets << s } if sockets.empty? raise last_error end rescue Exception sockets.each {|s| s.close } raise end end if block_given? begin yield sockets ensure sockets.each {|s| s.close if !s.closed? } end else sockets end end
    
      .udp_server_loop(port) {|msg, msg_src| ... } 
      .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
}# File 'ext/socket/lib/socket.rb', line 1019
def self.udp_server_loop(host=nil, port, &b) # :yield: message, message_source udp_server_sockets(host, port) {|sockets| udp_server_loop_on(sockets, &b) } end
.udp_server_loop_on(sockets) {|msg, msg_src| ... }
Run UDP/IP server loop on the given sockets.
The return value of .udp_server_sockets is appropriate for the argument.
It calls the block for each message received.
# File 'ext/socket/lib/socket.rb', line 992
def self.udp_server_loop_on(sockets, &b) # :yield: msg, msg_src loop { readable, _, _ = IO.select(sockets) udp_server_recv(readable, &b) } end
.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.
.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| ... }
  }
}# File 'ext/socket/lib/socket.rb', line 965
def self.udp_server_recv(sockets) sockets.each {|r| msg, sender_addrinfo, _, *controls = r.recvmsg_nonblock(exception: false) next if msg == :wait_readable ai = r.local_address if ai.ipv6? and pktinfo = controls.find {|c| c.cmsg_is?(:IPV6, :PKTINFO) } ai = Addrinfo.udp(pktinfo.ipv6_pktinfo_addr.ip_address, ai.ip_port) yield msg, UDPSource.new(sender_addrinfo, ai) {|reply_msg| r.sendmsg reply_msg, 0, sender_addrinfo, pktinfo } else yield msg, UDPSource.new(sender_addrinfo, ai) {|reply_msg| r.send reply_msg, 0, sender_addrinfo } end } end
.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
  }
}# File 'ext/socket/lib/socket.rb', line 878
def self.udp_server_sockets(host=nil, port) last_error = nil sockets = [] ipv6_recvpktinfo = nil if defined? Socket::AncillaryData if defined? Socket::IPV6_RECVPKTINFO # RFC 3542 ipv6_recvpktinfo = Socket::IPV6_RECVPKTINFO elsif defined? Socket::IPV6_PKTINFO # RFC 2292 ipv6_recvpktinfo = Socket::IPV6_PKTINFO end end local_addrs = Socket.ip_address_list ip_list = [] Addrinfo.foreach(host, port, nil, :DGRAM, nil, Socket::AI_PASSIVE) {|ai| if ai.ipv4? && ai.ip_address == "0.0.0.0" local_addrs.each {|a| next if !a.ipv4? ip_list << Addrinfo.new(a.to_sockaddr, :INET, :DGRAM, 0); } elsif ai.ipv6? && ai.ip_address == "::" && !ipv6_recvpktinfo local_addrs.each {|a| next if !a.ipv6? ip_list << Addrinfo.new(a.to_sockaddr, :INET6, :DGRAM, 0); } else ip_list << ai end } if port == 0 sockets = ip_sockets_port0(ip_list, false) else ip_list.each {|ip| ai = Addrinfo.udp(ip.ip_address, port) begin s = ai.bind rescue SystemCallError last_error = $! next end sockets << s } if sockets.empty? raise last_error end end sockets.each {|s| ai = s.local_address if ipv6_recvpktinfo && ai.ipv6? && ai.ip_address == "::" s.setsockopt(:IPV6, ipv6_recvpktinfo, 1) end } if block_given? begin yield sockets ensure sockets.each {|s| s.close if !s.closed? } if sockets end else sockets end end
.unix(path)
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
}.unix_server_loop(path, &b)
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
}# File 'ext/socket/lib/socket.rb', line 1156
def self.unix_server_loop(path, &b) # :yield: socket, client_addrinfo unix_server_socket(path) {|serv| accept_loop(serv, &b) } end
.unix_server_socket(path)
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>
}# File 'ext/socket/lib/socket.rb', line 1099
def self.unix_server_socket(path) if !unix_socket_abstract_name?(path) begin st = File.lstat(path) rescue Errno::ENOENT end if st&.socket? && st.owned? File.unlink path end end s = Addrinfo.unix(path).listen if block_given? begin yield s ensure s.close if !s.closed? if !unix_socket_abstract_name?(path) File.unlink path end end else s end end
    .unix_socket_abstract_name?(path)  ⇒ Boolean  (private)
  
# File 'ext/socket/lib/socket.rb', line 1127
def unix_socket_abstract_name?(path) /linux/ =~ RUBY_PLATFORM && /\A(\0|\z)/ =~ path end
    .unpack_sockaddr_in(sockaddr)  ⇒ Array, 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"]
    .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"Instance Method Details
    #accept  ⇒ 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>]
    #accept_nonblock([options])  ⇒ 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.closeRefer to #accept for the exceptions that may be thrown if the call to accept_nonblock fails.
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 exception: false, the options hash allows you to indicate that accept_nonblock should not raise an IO::WaitReadable exception, but return the symbol :wait_readable instead.
See
# File 'ext/socket/lib/socket.rb', line 582
def accept_nonblock(exception: true) __accept_nonblock(exception) end
    #bind(local_sockaddr)  ⇒ 0   
Binds to the given local address.
Parameter
- 
local_sockaddr- thestructsockaddr 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 callingsocket
- 
Errno::EBADF- the sockaddr specified is not a valid file descriptor
- 
Errno::EFAULT- the sockaddr argument cannot be accessed
- 
Errno::EINVAL- thesocketis already bound to an address, and the protocol does not support binding to the new sockaddr or thesockethas 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- thesocketdoes not refer to a socket
- 
Errno::EOPNOTSUPP- the socket type of thesocketdoes not support binding to an address
On unix-based based systems if the address family of the calling socket is 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 thesocketis denied
- 
Errno::EDESTADDRREQ- the sockaddr argument is a null pointer
- 
Errno::EISDIR- same asErrno::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- thesocketis already bound to an address
- 
Errno::ENOBUFS- no buffer space is available
- 
Errno::ENOTSOCK- thesocketargument does not refer to a socket
See
- 
bind manual pages on unix-based systems 
- 
bind function in Microsoft's Winsock functions reference 
    #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- thestructsockaddr 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.readUnix-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 thesocketis 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 specifiedsocket
- 
Errno::EALREADY- a connection is already in progress for the specified socket
- 
Errno::EBADF- thesocketis 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 thesocketand 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 specifiedsocketis 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- thesocketargument does not refer to a socket
- 
Errno::EOPNOTSUPP- the callingsocketis 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 time 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 thesocket.
- 
Errno::EALREADY- seeErrno::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 thissocket
- 
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- thesocketis a listening socket
- 
Errno::EISCONN- thesocketis 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- thesocketargument does not refer to a socket
- 
Errno::ETIMEDOUT- the attempt to connect time 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 
    #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 objectExample:
# 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.readRefer to #connect for the exceptions that may be thrown if the call to connect_nonblock fails.
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 exception: false, the options hash allows you to indicate that connect_nonblock should not raise an IO::WaitWritable exception, but return the symbol :wait_writable instead.
See
# Socket#connect# File 'ext/socket/lib/socket.rb', line 1206
def connect_nonblock(addr, exception: true) __connect_nonblock(addr, exception) end
#ipv6only!
enable the socket option IPV6_V6ONLY if IPV6_V6ONLY is available.
# File 'ext/socket/lib/socket.rb', line 453
def ipv6only! if defined? Socket::IPV6_V6ONLY self.setsockopt(:IPV6, :V6ONLY, 1) end end
    #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- thesockethas not been bound with a call to bind.
- 
Errno::EISCONN- thesocketis already connected
- 
Errno::EMFILE- no more socket descriptors are available
- 
Errno::ENOBUFS- no buffer space is available
- 
Errno::ENOTSOC-socketis not a socket
- 
Errno::EOPNOTSUPP- the referencedsocketis not a type that supports the listen method
See
- 
listen manual pages on unix-based systems 
- 
listen function in Microsoft's Winsock functions reference 
    
      #recvfrom(maxlen)  ⇒ Array, sender_addrinfo 
      #recvfrom(maxlen, flags)  ⇒ Array, sender_addrinfo 
    
  
Array, sender_addrinfo 
      #recvfrom(maxlen, flags)  ⇒ Array, 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 theMSG_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.closeUnix-based Exceptions
On unix-based based systems the following system exceptions may be raised if the call to recvfrom fails:
- 
Errno::EAGAIN- thesocketfile 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 thesocketfile descriptor is marked as O_NONBLOCK or thesocketdoes not support blocking to wait for out-of-band-data
- 
Errno::EWOULDBLOCK- seeErrno::EAGAIN
- 
Errno::EBADF- thesocketis 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- thesocketdoes 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 onsocketare 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-sockethas 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 onsocketwas zero or negative
- 
Errno::EISCONN-socketis 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, butsocketis not stream-style such as type SOCK_STREAM. OOB data is not supported in the communication domain associated withsocket, orsocketis unidirectional and supports only send operations
- 
Errno::ESHUTDOWN-sockethas been shutdown. It is not possible to call recvfrom on a socket after shutdown has been invoked.
- 
Errno::EWOULDBLOCK-socketis 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.
    #recvfrom_nonblock(maxlen[, flags[, outbuf[, opts]]])  ⇒ Array, 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, 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 theMSG_options
- 
outbuf- destination String buffer
- 
opts- keyword hash, supportingexception: 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.closeRefer to #recvfrom for the exceptions that may be thrown if the call to recvfrom_nonblock fails.
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 exception: false, the options hash allows you to indicate that accept_nonblock should not raise an IO::WaitReadable exception, but return the symbol :wait_readable instead.
See
# File 'ext/socket/lib/socket.rb', line 525
def recvfrom_nonblock(len, flag = 0, str = nil, exception: true) __recvfrom_nonblock(len, flag, str, exception) end
    #sysaccept  ⇒ Socket, 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.closeRefer to #accept for the exceptions that may be thrown if the call to sysaccept fails.