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