1 pub type sa_family_t = ::c_ushort;
2 pub type in_port_t = ::c_ushort;
3 pub type in_addr_t = ::c_uint;
4 
5 pub type socklen_t = ::c_uint;
6 
7 s! {
8     #[repr(align(16))]
9     pub struct sockaddr {
10         pub sa_family: sa_family_t,
11         pub sa_data: [::c_char; 0],
12     }
13 
14     pub struct in_addr {
15         pub s_addr: in_addr_t,
16     }
17 
18     #[repr(align(16))]
19     pub struct sockaddr_in {
20         pub sin_family: sa_family_t,
21         pub sin_port: in_port_t,
22         pub sin_addr: in_addr,
23     }
24 
25     #[repr(align(4))]
26     pub struct in6_addr {
27         pub s6_addr: [::c_uchar; 16],
28     }
29 
30     #[repr(align(16))]
31     pub struct sockaddr_in6 {
32         pub sin6_family: sa_family_t,
33         pub sin6_port: in_port_t,
34         pub sin6_flowinfo: ::c_uint,
35         pub sin6_addr: in6_addr,
36         pub sin6_scope_id: ::c_uint,
37     }
38 
39     #[repr(align(16))]
40     pub struct sockaddr_storage {
41         pub ss_family: sa_family_t,
42         pub __ss_data: [::c_char; 32],
43     }
44 
45     pub struct addrinfo {
46         pub ai_flags: ::c_int,
47         pub ai_family: ::c_int,
48         pub ai_socktype: ::c_int,
49         pub ai_protocol: ::c_int,
50         pub ai_addrlen: socklen_t,
51         pub ai_addr: *mut sockaddr,
52         pub ai_canonname: *mut ::c_char,
53         pub ai_next: *mut addrinfo,
54     }
55 
56     pub struct ip_mreq {
57         pub imr_multiaddr: in_addr,
58         pub imr_interface: in_addr,
59     }
60 
61     pub struct ipv6_mreq {
62         pub ipv6mr_multiaddr: in6_addr,
63         pub ipv6mr_interface: ::c_uint,
64     }
65 }
66 
67 pub const SHUT_RD: ::c_int = 1 << 0;
68 pub const SHUT_WR: ::c_int = 1 << 1;
69 pub const SHUT_RDWR: ::c_int = SHUT_RD | SHUT_WR;
70 
71 pub const MSG_NOSIGNAL: ::c_int = 0x4000;
72 pub const MSG_PEEK: ::c_int = 0x0002;
73 
74 pub const SO_REUSEADDR: ::c_int = 2;
75 pub const SO_ERROR: ::c_int = 4;
76 pub const SO_BROADCAST: ::c_int = 6;
77 pub const SO_LINGER: ::c_int = 13;
78 pub const SO_RCVTIMEO: ::c_int = 66;
79 pub const SO_SNDTIMEO: ::c_int = 67;
80 
81 pub const SOCK_DGRAM: ::c_int = 5;
82 pub const SOCK_STREAM: ::c_int = 6;
83 
84 pub const SOL_SOCKET: ::c_int = 0x7fffffff;
85 
86 pub const AF_INET: ::c_int = 1;
87 pub const AF_INET6: ::c_int = 2;
88 
89 pub const IPPROTO_IP: ::c_int = 0;
90 pub const IPPROTO_TCP: ::c_int = 6;
91 pub const IPPROTO_IPV6: ::c_int = 41;
92 
93 pub const IP_TTL: ::c_int = 2;
94 pub const IP_MULTICAST_TTL: ::c_int = 33;
95 pub const IP_MULTICAST_LOOP: ::c_int = 34;
96 pub const IP_ADD_MEMBERSHIP: ::c_int = 35;
97 pub const IP_DROP_MEMBERSHIP: ::c_int = 36;
98 
99 pub const IPV6_MULTICAST_LOOP: ::c_int = 19;
100 pub const IPV6_JOIN_GROUP: ::c_int = 20;
101 pub const IPV6_LEAVE_GROUP: ::c_int = 21;
102 pub const IPV6_V6ONLY: ::c_int = 26;
103 
104 pub const IPV6_ADD_MEMBERSHIP: ::c_int = IPV6_JOIN_GROUP;
105 pub const IPV6_DROP_MEMBERSHIP: ::c_int = IPV6_LEAVE_GROUP;
106 
107 pub const TCP_NODELAY: ::c_int = 1;
108 
109 pub const EAI_SYSTEM: ::c_int = -11;
110 
111 extern "C" {
socket(domain: ::c_int, type_: ::c_int, protocol: ::c_int) -> ::c_int112     pub fn socket(domain: ::c_int, type_: ::c_int, protocol: ::c_int) -> ::c_int;
connect(fd: ::c_int, name: *const sockaddr, addrlen: socklen_t) -> ::c_int113     pub fn connect(fd: ::c_int, name: *const sockaddr, addrlen: socklen_t) -> ::c_int;
bind(socket: ::c_int, addr: *const sockaddr, addrlen: socklen_t) -> ::c_int114     pub fn bind(socket: ::c_int, addr: *const sockaddr, addrlen: socklen_t) -> ::c_int;
listen(socket: ::c_int, backlog: ::c_int) -> ::c_int115     pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
accept(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int116     pub fn accept(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int;
117 
getsockname(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int118     pub fn getsockname(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int;
getpeername(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int119     pub fn getpeername(socket: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> ::c_int;
120 
sendto( socket: ::c_int, buffer: *const ::c_void, length: ::size_t, flags: ::c_int, addr: *const sockaddr, addrlen: socklen_t, ) -> ::ssize_t121     pub fn sendto(
122         socket: ::c_int,
123         buffer: *const ::c_void,
124         length: ::size_t,
125         flags: ::c_int,
126         addr: *const sockaddr,
127         addrlen: socklen_t,
128     ) -> ::ssize_t;
recvfrom( socket: ::c_int, buffer: *mut ::c_void, length: ::size_t, flags: ::c_int, addr: *mut sockaddr, addrlen: *mut socklen_t, ) -> ::ssize_t129     pub fn recvfrom(
130         socket: ::c_int,
131         buffer: *mut ::c_void,
132         length: ::size_t,
133         flags: ::c_int,
134         addr: *mut sockaddr,
135         addrlen: *mut socklen_t,
136     ) -> ::ssize_t;
137 
getsockopt( sockfd: ::c_int, level: ::c_int, optname: ::c_int, optval: *mut ::c_void, optlen: *mut socklen_t, ) -> ::c_int138     pub fn getsockopt(
139         sockfd: ::c_int,
140         level: ::c_int,
141         optname: ::c_int,
142         optval: *mut ::c_void,
143         optlen: *mut socklen_t,
144     ) -> ::c_int;
setsockopt( sockfd: ::c_int, level: ::c_int, optname: ::c_int, optval: *const ::c_void, optlen: socklen_t, ) -> ::c_int145     pub fn setsockopt(
146         sockfd: ::c_int,
147         level: ::c_int,
148         optname: ::c_int,
149         optval: *const ::c_void,
150         optlen: socklen_t,
151     ) -> ::c_int;
152 
getaddrinfo( host: *const ::c_char, serv: *const ::c_char, hint: *const addrinfo, res: *mut *mut addrinfo, ) -> ::c_int153     pub fn getaddrinfo(
154         host: *const ::c_char,
155         serv: *const ::c_char,
156         hint: *const addrinfo,
157         res: *mut *mut addrinfo,
158     ) -> ::c_int;
freeaddrinfo(p: *mut addrinfo)159     pub fn freeaddrinfo(p: *mut addrinfo);
gai_strerror(ecode: ::c_int) -> *const ::c_char160     pub fn gai_strerror(ecode: ::c_int) -> *const ::c_char;
161 }
162