1 module tango.sys.freebsd.consts.socket;
2     import tango.sys.freebsd.consts.fcntl: F_GETFL, F_SETFL,O_NONBLOCK;
3     enum {SOCKET_ERROR = -1}
4     enum
5     {
6         SO_ACCEPTCONN   = 0x0002,
7         SO_BROADCAST    = 0x0020,
8         SO_DEBUG        = 0x0001,
9         SO_DONTROUTE    = 0x0010,
10         SO_ERROR        = 0x1007,
11         SO_KEEPALIVE    = 0x0008,
12         SO_LINGER       = 0x0080,
13         SO_OOBINLINE    = 0x0100,
14         SO_RCVBUF       = 0x1002,
15         SO_RCVLOWAT     = 0x1004,
16         SO_RCVTIMEO     = 0x1006,
17         SO_REUSEADDR    = 0x0004,
18         SO_SNDBUF       = 0x1001,
19         SO_SNDLOWAT     = 0x1003,
20         SO_SNDTIMEO     = 0x1005,
21         SO_TYPE         = 0x1008,
22         SO_DONTLINGER   = ~(SO_LINGER),
23         // OptionLevel.IP settings unconfirmed
24         IP_MULTICAST_TTL = 33 ,
25         IP_MULTICAST_LOOP = 34 ,
26         IP_ADD_MEMBERSHIP = 35 ,
27         IP_DROP_MEMBERSHIP = 36,
28         // OptionLevel.TCP settings
29         TCP_NODELAY = 1 ,
30     }
31     
32     enum
33     {
34         SOCK_STREAM = 1 , /++ sequential, reliable +/
35         SOCK_DGRAM = 2 , /++ connectionless unreliable, max length +/
36         SOCK_SEQPACKET = 5, /++ sequential, reliable, max length +/
37         SOCK_RAW = 3 , /++ raw protocol +/
38     }
39 
40     enum
41     {
42         SOL_SOCKET      = 0xffff,
43     }
44     /* Standard well-defined IP protocols.  */
45     private enum
46       {
47         IPPROTO_IP = 0, /* Dummy protocol for TCP.  */
48         IPPROTO_IPV4 = 4, /* Dummy protocol for TCP.  */
49         IPPROTO_IPV6 = 41, /* IPv6 header.  */
50         IPPROTO_ICMP = 1, /* Internet Control Message Protocol.  */
51         IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */
52         IPPROTO_TCP = 6, /* Transmission Control Protocol.  */
53         IPPROTO_PUP = 12, /* PUP protocol.  */
54         IPPROTO_UDP = 17, /* User Datagram Protocol.  */
55         IPPROTO_IDP = 22, /* XNS IDP protocol.  */
56         /+
57         // undefined for cross platform reasons, if you need them ask
58         IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options.  */
59         IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94).  */
60         IPPROTO_EGP = 8, /* Exterior Gateway Protocol.  */
61         IPPROTO_TP = 29, /* SO Transport Protocol Class 4.  */
62         IPPROTO_ROUTING = 43, /* IPv6 routing header.  */
63         IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header.  */
64         IPPROTO_RSVP = 46, /* Reservation Protocol.  */
65         IPPROTO_GRE = 47, /* General Routing Encapsulation.  */
66         IPPROTO_ESP = 50, /* encapsulating security payload.  */
67         IPPROTO_AH = 51, /* authentication header.  */
68         IPPROTO_ICMPV6 = 58, /* ICMPv6.  */
69         IPPROTO_NONE = 59, /* IPv6 no next header.  */
70         IPPROTO_DSTOPTS = 60, /* IPv6 destination options.  */
71         IPPROTO_MTP = 92, /* Multicast Transport Protocol.  */
72         IPPROTO_ENCAP = 98, /* Encapsulation Header.  */
73         IPPROTO_PIM = 103, /* Protocol Independent Multicast.  */
74         IPPROTO_COMP = 108, /* Compression Header Protocol.  */
75         IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol.  */
76         IPPROTO_RAW = 255, /* Raw IP packets.  */
77         IPPROTO_MAX
78         +/
79       };
80     enum
81     {
82         AF_UNSPEC = 0 ,
83         AF_UNIX = 1 ,
84         AF_INET = 2 ,
85         AF_IPX = 23 ,
86         AF_APPLETALK = 16,
87         AF_INET6 = 28
88     }
89     enum : uint
90     {
91         SCM_RIGHTS = 0x01
92     }
93     enum
94     {
95         SOMAXCONN       = 128
96     }
97     enum : uint
98     {
99         MSG_CTRUNC      = 0x20,
100         MSG_DONTROUTE   = 0x4,
101         MSG_EOR         = 0x8,
102         MSG_OOB         = 0x1,
103         MSG_PEEK        = 0x2,
104         MSG_TRUNC       = 0x10,
105         MSG_WAITALL     = 0x40,
106         MSG_NOSIGNAL    = 0x20000
107     }
108     enum
109     {
110         SHUT_RD = 0,
111         SHUT_WR = 1,
112         SHUT_RDWR = 2
113     }
114 
115  enum: int
116  {
117         AI_PASSIVE = 0x00000001, /// get address to use bind()
118         AI_CANONNAME = 0x00000002, /// fill ai_canonname
119         AI_NUMERICHOST = 0x00000004, /// prevent host name resolution
120         AI_NUMERICSERV = 0x00000008, /// prevent service name resolution valid flags for addrinfo (not a standard def, apps should not use it)
121         AI_ALL = 0x00000100, /// IPv6 and IPv4-mapped (with AI_V4MAPPED) 
122         AI_V4MAPPED_CFG = 0x00000200, /// accept IPv4-mapped if kernel supports
123         AI_ADDRCONFIG = 0x00000400, /// only if any address is assigned
124         AI_V4MAPPED = 0x00000800, /// accept IPv4-mapped IPv6 address special recommended flags for getipnodebyname
125         AI_MASK = (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_ADDRCONFIG),
126         AI_DEFAULT = (AI_V4MAPPED_CFG | AI_ADDRCONFIG),
127  }
128                         
129 
130 enum
131 {
132         EAI_BADFLAGS = 3,       /// Invalid value for `ai_flags' field.
133         EAI_NONAME = 8, /// NAME or SERVICE is unknown.
134         EAI_AGAIN = 2,  /// Temporary failure in name resolution.
135         EAI_FAIL = 4,   /// Non-recoverable failure in name res.
136         EAI_NODATA = 7, /// No address associated with NAME.
137         EAI_FAMILY = 5, /// `ai_family' not supported.
138         EAI_SOCKTYPE = 10,      /// `ai_socktype' not supported.
139         EAI_SERVICE = 9,        /// SERVICE not supported for `ai_socktype'.
140         EAI_MEMORY = 6, /// Memory allocation failure.
141 }       
142 
143 enum
144 {
145         NI_MAXHOST = 1025,
146         NI_MAXSERV = 32,
147         NI_NUMERICHOST = 0x00000002,    /// Don't try to look up hostname.
148         NI_NUMERICSERV = 0x00000008,    /// Don't convert port number to name.
149         NI_NOFQDN = 0x00000001, /// Only return nodename portion.
150         NI_NAMEREQD = 0x00000004,       /// Don't return numeric addresses.
151         NI_DGRAM = 0x00000010,  /// Look up UDP service rather than TCP.
152 }       
153 
154