// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! Definitions to be used with the WinSock 2 DLL and WinSock 2 applications. use ctypes::{ __uint32, __uint64, c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, }; use shared::basetsd::{DWORD_PTR, UINT_PTR, ULONG_PTR}; use shared::guiddef::{GUID, LPGUID}; use shared::inaddr::in_addr; use shared::minwindef::{ BOOL, DWORD, FARPROC, HIWORD, INT, LOWORD, LPDWORD, LPHANDLE, LPINT, LPVOID, MAKELONG, UINT, ULONG, WORD, WPARAM, }; use shared::qos::FLOWSPEC; use shared::windef::HWND; use shared::winerror::{ ERROR_INVALID_HANDLE, ERROR_INVALID_PARAMETER, ERROR_IO_INCOMPLETE, ERROR_IO_PENDING, ERROR_NOT_ENOUGH_MEMORY, ERROR_OPERATION_ABORTED, WAIT_TIMEOUT, }; use shared::ws2def::{ AF_APPLETALK, AF_ATM, AF_BAN, AF_BTH, AF_CCITT, AF_CHAOS, AF_DATAKIT, AF_DECnet, AF_DLI, AF_ECMA, AF_FIREFOX, AF_HYLINK, AF_IMPLINK, AF_INET, AF_INET6, AF_IPX, AF_ISO, AF_LAT, AF_MAX, AF_NS, AF_OSI, AF_PUP, AF_SNA, AF_UNIX, AF_UNKNOWN1, AF_UNSPEC, AF_VOICEVIEW, INADDR_ANY, LPCSADDR_INFO, LPSOCKADDR, LPWSABUF, LPWSAMSG, PSOCKET_ADDRESS_LIST, SOCKADDR, SOCKADDR_IN, WSABUF, }; use shared::wtypesbase::{BLOB, LPBLOB}; use um::minwinbase::OVERLAPPED; use um::winbase::{INFINITE, WAIT_FAILED, WAIT_IO_COMPLETION, WAIT_OBJECT_0}; use um::winnt::{ CHAR, HANDLE, LONG, LPCSTR, LPSTR, LPWSTR, MAXIMUM_WAIT_OBJECTS, PWSTR, SHORT, WCHAR, }; pub const WINSOCK_VERSION: WORD = 2 | (2 << 8); pub type u_char = c_uchar; pub type u_short = c_ushort; pub type u_int = c_uint; pub type u_long = c_ulong; pub type u_int64 = __uint64; pub type SOCKET = UINT_PTR; pub const FD_SETSIZE: usize = 64; STRUCT!{struct fd_set { fd_count: u_int, fd_array: [SOCKET; FD_SETSIZE], }} extern "system" { pub fn __WSAFDIsSet( fd: SOCKET, _: *mut fd_set, ) -> c_int; } STRUCT!{struct timeval { tv_sec: c_long, tv_usec: c_long, }} pub const IOCPARM_MASK: c_long = 0x7f; pub const IOC_VOID: c_long = 0x20000000; pub const IOC_OUT: c_long = 0x40000000; pub const IOC_IN: c_long = 0x80000000; pub const IOC_INOUT: c_long = IOC_IN | IOC_OUT; pub const FIONREAD: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 127; pub const FIONBIO: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 126; pub const FIOASYNC: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 125; pub const SIOCSHIWAT: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 0; pub const SIOCGHIWAT: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 1; pub const SIOCSLOWAT: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 2; pub const SIOCGLOWAT: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 3; pub const SIOCATMARK: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 7; STRUCT!{struct hostent { h_name: *mut c_char, h_aliases: *mut *mut c_char, h_addrtype: c_short, h_length: c_short, h_addr_list: *mut *mut c_char, }} STRUCT!{struct netent { n_name: *mut c_char, n_aliases: *mut *mut c_char, n_addrtype: c_short, n_net: u_long, }} #[cfg(target_pointer_width = "32")] STRUCT!{struct servent { s_name: *mut c_char, s_aliases: *mut *mut c_char, s_port: c_short, s_proto: *mut c_char, }} #[cfg(target_pointer_width = "64")] STRUCT!{struct servent { s_name: *mut c_char, s_aliases: *mut *mut c_char, s_proto: *mut c_char, s_port: c_short, }} STRUCT!{struct protoent { p_name: *mut c_char, p_aliases: *mut *mut c_char, p_proto: c_short, }} pub const IPPORT_ECHO: c_short = 7; pub const IPPORT_DISCARD: c_short = 9; pub const IPPORT_SYSTAT: c_short = 11; pub const IPPORT_DAYTIME: c_short = 13; pub const IPPORT_NETSTAT: c_short = 15; pub const IPPORT_FTP: c_short = 21; pub const IPPORT_TELNET: c_short = 23; pub const IPPORT_SMTP: c_short = 25; pub const IPPORT_TIMESERVER: c_short = 37; pub const IPPORT_NAMESERVER: c_short = 42; pub const IPPORT_WHOIS: c_short = 43; pub const IPPORT_MTP: c_short = 57; pub const IPPORT_TFTP: c_short = 69; pub const IPPORT_RJE: c_short = 77; pub const IPPORT_FINGER: c_short = 79; pub const IPPORT_TTYLINK: c_short = 87; pub const IPPORT_SUPDUP: c_short = 95; pub const IPPORT_EXECSERVER: c_short = 512; pub const IPPORT_LOGINSERVER: c_short = 513; pub const IPPORT_CMDSERVER: c_short = 514; pub const IPPORT_EFSSERVER: c_short = 520; pub const IPPORT_BIFFUDP: c_short = 512; pub const IPPORT_WHOSERVER: c_short = 513; pub const IPPORT_ROUTESERVER: c_short = 520; pub const IPPORT_RESERVED: c_short = 1024; pub const IMPLINK_IP: c_short = 155; pub const IMPLINK_LOWEXPER: c_short = 156; pub const IMPLINK_HIGHEXPER: c_short = 158; pub const ADDR_ANY: ULONG = INADDR_ANY; pub const WSADESCRIPTION_LEN: usize = 256; pub const WSASYS_STATUS_LEN: usize = 128; #[cfg(target_pointer_width = "32")] STRUCT!{struct WSADATA { wVersion: WORD, wHighVersion: WORD, szDescription: [c_char; WSADESCRIPTION_LEN + 1], szSystemStatus: [c_char; WSASYS_STATUS_LEN + 1], iMaxSockets: c_ushort, iMaxUdpDg: c_ushort, lpVendorInfo: *mut c_char, }} #[cfg(target_pointer_width = "64")] STRUCT!{struct WSADATA { wVersion: WORD, wHighVersion: WORD, iMaxSockets: c_ushort, iMaxUdpDg: c_ushort, lpVendorInfo: *mut c_char, szDescription: [c_char; WSADESCRIPTION_LEN + 1], szSystemStatus: [c_char; WSASYS_STATUS_LEN + 1], }} pub type LPWSADATA = *mut WSADATA; pub const INVALID_SOCKET: SOCKET = !0; pub const SOCKET_ERROR: c_int = -1; pub const FROM_PROTOCOL_INFO: c_int = -1; pub const SOCK_STREAM: c_int = 1; pub const SOCK_DGRAM: c_int = 2; pub const SOCK_RAW: c_int = 3; pub const SOCK_RDM: c_int = 4; pub const SOCK_SEQPACKET: c_int = 5; pub const SO_DEBUG: c_int = 0x0001; pub const SO_ACCEPTCONN: c_int = 0x0002; pub const SO_REUSEADDR: c_int = 0x0004; pub const SO_KEEPALIVE: c_int = 0x0008; pub const SO_DONTROUTE: c_int = 0x0010; pub const SO_BROADCAST: c_int = 0x0020; pub const SO_USELOOPBACK: c_int = 0x0040; pub const SO_LINGER: c_int = 0x0080; pub const SO_OOBINLINE: c_int = 0x0100; pub const SO_DONTLINGER: c_int = !SO_LINGER; pub const SO_EXCLUSIVEADDRUSE: c_int = !SO_REUSEADDR; pub const SO_SNDBUF: c_int = 0x1001; pub const SO_RCVBUF: c_int = 0x1002; pub const SO_SNDLOWAT: c_int = 0x1003; pub const SO_RCVLOWAT: c_int = 0x1004; pub const SO_SNDTIMEO: c_int = 0x1005; pub const SO_RCVTIMEO: c_int = 0x1006; pub const SO_ERROR: c_int = 0x1007; pub const SO_TYPE: c_int = 0x1008; pub const SO_GROUP_ID: c_int = 0x2001; pub const SO_GROUP_PRIORITY: c_int = 0x2002; pub const SO_MAX_MSG_SIZE: c_int = 0x2003; pub const SO_PROTOCOL_INFOA: c_int = 0x2004; pub const SO_PROTOCOL_INFOW: c_int = 0x2005; pub const PVD_CONFIG: c_int = 0x3001; pub const SO_CONDITIONAL_ACCEPT: c_int = 0x3002; STRUCT!{struct sockproto { sp_family: u_short, sp_protocol: u_short, }} pub const PF_UNSPEC: c_int = AF_UNSPEC; pub const PF_UNIX: c_int = AF_UNIX; pub const PF_INET: c_int = AF_INET; pub const PF_IMPLINK: c_int = AF_IMPLINK; pub const PF_PUP: c_int = AF_PUP; pub const PF_CHAOS: c_int = AF_CHAOS; pub const PF_NS: c_int = AF_NS; pub const PF_IPX: c_int = AF_IPX; pub const PF_ISO: c_int = AF_ISO; pub const PF_OSI: c_int = AF_OSI; pub const PF_ECMA: c_int = AF_ECMA; pub const PF_DATAKIT: c_int = AF_DATAKIT; pub const PF_CCITT: c_int = AF_CCITT; pub const PF_SNA: c_int = AF_SNA; pub const PF_DECnet: c_int = AF_DECnet; pub const PF_DLI: c_int = AF_DLI; pub const PF_LAT: c_int = AF_LAT; pub const PF_HYLINK: c_int = AF_HYLINK; pub const PF_APPLETALK: c_int = AF_APPLETALK; pub const PF_VOICEVIEW: c_int = AF_VOICEVIEW; pub const PF_FIREFOX: c_int = AF_FIREFOX; pub const PF_UNKNOWN1: c_int = AF_UNKNOWN1; pub const PF_BAN: c_int = AF_BAN; pub const PF_ATM: c_int = AF_ATM; pub const PF_INET6: c_int = AF_INET6; pub const PF_BTH: c_int = AF_BTH; pub const PF_MAX: c_int = AF_MAX; STRUCT!{struct linger { l_onoff: u_short, l_linger: u_short, }} pub const SOL_SOCKET: c_int = 0xffff; pub const SOMAXCONN: c_int = 0x7fffffff; #[inline] pub fn SOMAXCONN_HINT(b: c_int) -> c_int { -b } pub const MSG_OOB: c_int = 0x1; pub const MSG_PEEK: c_int = 0x2; pub const MSG_DONTROUTE: c_int = 0x4; pub const MSG_WAITALL: c_int = 0x8; pub const MSG_PUSH_IMMEDIATE: c_int = 0x20; pub const MSG_PARTIAL: c_int = 0x8000; pub const MSG_INTERRUPT: c_int = 0x10; pub const MSG_MAXIOVLEN: c_int = 16; pub const MAXGETHOSTSTRUCT: usize = 1024; pub const FD_READ_BIT: c_long = 0; pub const FD_READ: c_long = 1 << FD_READ_BIT; pub const FD_WRITE_BIT: c_long = 1; pub const FD_WRITE: c_long = 1 << FD_WRITE_BIT; pub const FD_OOB_BIT: c_long = 2; pub const FD_OOB: c_long = 1 << FD_OOB_BIT; pub const FD_ACCEPT_BIT: c_long = 3; pub const FD_ACCEPT: c_long = 1 << FD_ACCEPT_BIT; pub const FD_CONNECT_BIT: c_long = 4; pub const FD_CONNECT: c_long = 1 << FD_CONNECT_BIT; pub const FD_CLOSE_BIT: c_long = 5; pub const FD_CLOSE: c_long = 1 << FD_CLOSE_BIT; pub const FD_QOS_BIT: c_long = 6; pub const FD_QOS: c_long = 1 << FD_QOS_BIT; pub const FD_GROUP_QOS_BIT: c_long = 7; pub const FD_GROUP_QOS: c_long = 1 << FD_GROUP_QOS_BIT; pub const FD_ROUTING_INTERFACE_CHANGE_BIT: c_long = 8; pub const FD_ROUTING_INTERFACE_CHANGE: c_long = 1 << FD_ROUTING_INTERFACE_CHANGE_BIT; pub const FD_ADDRESS_LIST_CHANGE_BIT: c_long = 9; pub const FD_ADDRESS_LIST_CHANGE: c_long = 1 << FD_ADDRESS_LIST_CHANGE_BIT; pub const FD_MAX_EVENTS: usize = 10; pub const FD_ALL_EVENTS: c_long = (1 << FD_MAX_EVENTS) - 1; pub const WSABASEERR: c_int = 10000; pub const WSAEINTR: c_int = WSABASEERR+4; pub const WSAEBADF: c_int = WSABASEERR+9; pub const WSAEACCES: c_int = WSABASEERR+13; pub const WSAEFAULT: c_int = WSABASEERR+14; pub const WSAEINVAL: c_int = WSABASEERR+22; pub const WSAEMFILE: c_int = WSABASEERR+24; pub const WSAEWOULDBLOCK: c_int = WSABASEERR+35; pub const WSAEINPROGRESS: c_int = WSABASEERR+36; pub const WSAEALREADY: c_int = WSABASEERR+37; pub const WSAENOTSOCK: c_int = WSABASEERR+38; pub const WSAEDESTADDRREQ: c_int = WSABASEERR+39; pub const WSAEMSGSIZE: c_int = WSABASEERR+40; pub const WSAEPROTOTYPE: c_int = WSABASEERR+41; pub const WSAENOPROTOOPT: c_int = WSABASEERR+42; pub const WSAEPROTONOSUPPORT: c_int = WSABASEERR+43; pub const WSAESOCKTNOSUPPORT: c_int = WSABASEERR+44; pub const WSAEOPNOTSUPP: c_int = WSABASEERR+45; pub const WSAEPFNOSUPPORT: c_int = WSABASEERR+46; pub const WSAEAFNOSUPPORT: c_int = WSABASEERR+47; pub const WSAEADDRINUSE: c_int = WSABASEERR+48; pub const WSAEADDRNOTAVAIL: c_int = WSABASEERR+49; pub const WSAENETDOWN: c_int = WSABASEERR+50; pub const WSAENETUNREACH: c_int = WSABASEERR+51; pub const WSAENETRESET: c_int = WSABASEERR+52; pub const WSAECONNABORTED: c_int = WSABASEERR+53; pub const WSAECONNRESET: c_int = WSABASEERR+54; pub const WSAENOBUFS: c_int = WSABASEERR+55; pub const WSAEISCONN: c_int = WSABASEERR+56; pub const WSAENOTCONN: c_int = WSABASEERR+57; pub const WSAESHUTDOWN: c_int = WSABASEERR+58; pub const WSAETOOMANYREFS: c_int = WSABASEERR+59; pub const WSAETIMEDOUT: c_int = WSABASEERR+60; pub const WSAECONNREFUSED: c_int = WSABASEERR+61; pub const WSAELOOP: c_int = WSABASEERR+62; pub const WSAENAMETOOLONG: c_int = WSABASEERR+63; pub const WSAEHOSTDOWN: c_int = WSABASEERR+64; pub const WSAEHOSTUNREACH: c_int = WSABASEERR+65; pub const WSAENOTEMPTY: c_int = WSABASEERR+66; pub const WSAEPROCLIM: c_int = WSABASEERR+67; pub const WSAEUSERS: c_int = WSABASEERR+68; pub const WSAEDQUOT: c_int = WSABASEERR+69; pub const WSAESTALE: c_int = WSABASEERR+70; pub const WSAEREMOTE: c_int = WSABASEERR+71; pub const WSASYSNOTREADY: c_int = WSABASEERR+91; pub const WSAVERNOTSUPPORTED: c_int = WSABASEERR+92; pub const WSANOTINITIALISED: c_int = WSABASEERR+93; pub const WSAEDISCON: c_int = WSABASEERR+101; pub const WSAENOMORE: c_int = WSABASEERR+102; pub const WSAECANCELLED: c_int = WSABASEERR+103; pub const WSAEINVALIDPROCTABLE: c_int = WSABASEERR+104; pub const WSAEINVALIDPROVIDER: c_int = WSABASEERR+105; pub const WSAEPROVIDERFAILEDINIT: c_int = WSABASEERR+106; pub const WSASYSCALLFAILURE: c_int = WSABASEERR+107; pub const WSASERVICE_NOT_FOUND: c_int = WSABASEERR+108; pub const WSATYPE_NOT_FOUND: c_int = WSABASEERR+109; pub const WSA_E_NO_MORE: c_int = WSABASEERR+110; pub const WSA_E_CANCELLED: c_int = WSABASEERR+111; pub const WSAEREFUSED: c_int = WSABASEERR+112; pub const WSAHOST_NOT_FOUND: c_int = WSABASEERR+1001; pub const WSATRY_AGAIN: c_int = WSABASEERR+1002; pub const WSANO_RECOVERY: c_int = WSABASEERR+1003; pub const WSANO_DATA: c_int = WSABASEERR+1004; pub const WSA_QOS_RECEIVERS: c_int = WSABASEERR + 1005; pub const WSA_QOS_SENDERS: c_int = WSABASEERR + 1006; pub const WSA_QOS_NO_SENDERS: c_int = WSABASEERR + 1007; pub const WSA_QOS_NO_RECEIVERS: c_int = WSABASEERR + 1008; pub const WSA_QOS_REQUEST_CONFIRMED: c_int = WSABASEERR + 1009; pub const WSA_QOS_ADMISSION_FAILURE: c_int = WSABASEERR + 1010; pub const WSA_QOS_POLICY_FAILURE: c_int = WSABASEERR + 1011; pub const WSA_QOS_BAD_STYLE: c_int = WSABASEERR + 1012; pub const WSA_QOS_BAD_OBJECT: c_int = WSABASEERR + 1013; pub const WSA_QOS_TRAFFIC_CTRL_ERROR: c_int = WSABASEERR + 1014; pub const WSA_QOS_GENERIC_ERROR: c_int = WSABASEERR + 1015; pub const WSA_QOS_ESERVICETYPE: c_int = WSABASEERR + 1016; pub const WSA_QOS_EFLOWSPEC: c_int = WSABASEERR + 1017; pub const WSA_QOS_EPROVSPECBUF: c_int = WSABASEERR + 1018; pub const WSA_QOS_EFILTERSTYLE: c_int = WSABASEERR + 1019; pub const WSA_QOS_EFILTERTYPE: c_int = WSABASEERR + 1020; pub const WSA_QOS_EFILTERCOUNT: c_int = WSABASEERR + 1021; pub const WSA_QOS_EOBJLENGTH: c_int = WSABASEERR + 1022; pub const WSA_QOS_EFLOWCOUNT: c_int = WSABASEERR + 1023; pub const WSA_QOS_EUNKOWNPSOBJ: c_int = WSABASEERR + 1024; pub const WSA_QOS_EPOLICYOBJ: c_int = WSABASEERR + 1025; pub const WSA_QOS_EFLOWDESC: c_int = WSABASEERR + 1026; pub const WSA_QOS_EPSFLOWSPEC: c_int = WSABASEERR + 1027; pub const WSA_QOS_EPSFILTERSPEC: c_int = WSABASEERR + 1028; pub const WSA_QOS_ESDMODEOBJ: c_int = WSABASEERR + 1029; pub const WSA_QOS_ESHAPERATEOBJ: c_int = WSABASEERR + 1030; pub const WSA_QOS_RESERVED_PETYPE: c_int = WSABASEERR + 1031; #[inline] pub unsafe fn h_errno() -> c_int { WSAGetLastError() } pub const HOST_NOT_FOUND: c_int = WSAHOST_NOT_FOUND; pub const TRY_AGAIN: c_int = WSATRY_AGAIN; pub const NO_RECOVERY: c_int = WSANO_RECOVERY; pub const NO_DATA: c_int = WSANO_DATA; pub const WSANO_ADDRESS: c_int = WSANO_DATA; pub const NO_ADDRESS: c_int = WSANO_ADDRESS; pub type WSAEVENT = HANDLE; pub type LPWSAEVENT = LPHANDLE; pub type WSAOVERLAPPED = OVERLAPPED; pub type LPWSAOVERLAPPED = *mut OVERLAPPED; pub const WSA_IO_PENDING: c_int = ERROR_IO_PENDING as i32; pub const WSA_IO_INCOMPLETE: c_int = ERROR_IO_INCOMPLETE as i32; pub const WSA_INVALID_HANDLE: c_int = ERROR_INVALID_HANDLE as i32; pub const WSA_INVALID_PARAMETER: c_int = ERROR_INVALID_PARAMETER as i32; pub const WSA_NOT_ENOUGH_MEMORY: c_int = ERROR_NOT_ENOUGH_MEMORY as i32; pub const WSA_OPERATION_ABORTED: c_int = ERROR_OPERATION_ABORTED as i32; pub const WSA_INVALID_EVENT: WSAEVENT = 0 as WSAEVENT; pub const WSA_MAXIMUM_WAIT_EVENTS: DWORD = MAXIMUM_WAIT_OBJECTS; pub const WSA_WAIT_FAILED: DWORD = WAIT_FAILED; pub const WSA_WAIT_EVENT_0: DWORD = WAIT_OBJECT_0; pub const WSA_WAIT_IO_COMPLETION: DWORD = WAIT_IO_COMPLETION; pub const WSA_WAIT_TIMEOUT: DWORD = WAIT_TIMEOUT; pub const WSA_INFINITE: DWORD = INFINITE; STRUCT!{struct QOS { SendingFlowspec: FLOWSPEC, FLOWSPEC: FLOWSPEC, ProviderSpecific: WSABUF, }} pub type LPQOS = *mut QOS; pub const CF_ACCEPT: c_int = 0x0000; pub const CF_REJECT: c_int = 0x0001; pub const CF_DEFER: c_int = 0x0002; pub const SD_RECEIVE: c_int = 0x00; pub const SD_SEND: c_int = 0x01; pub const SD_BOTH: c_int = 0x02; pub type GROUP = c_uint; pub const SG_UNCONSTRAINED_GROUP: GROUP = 0x01; pub const SG_CONSTRAINED_GROUP: GROUP = 0x02; STRUCT!{struct WSANETWORKEVENTS { lNetworkEvents: c_long, iErrorCode: [c_int; FD_MAX_EVENTS], }} pub type LPWSANETWORKEVENTS = *mut WSANETWORKEVENTS; pub const MAX_PROTOCOL_CHAIN: usize = 7; pub const BASE_PROTOCOL: c_int = 1; pub const LAYERED_PROTOCOL: c_int = 0; STRUCT!{struct WSAPROTOCOLCHAIN { ChainLen: c_int, ChainEntries: [DWORD; MAX_PROTOCOL_CHAIN], }} pub type LPWSAPROTOCOLCHAIN = *mut WSAPROTOCOLCHAIN; pub const WSAPROTOCOL_LEN: usize = 255; STRUCT!{struct WSAPROTOCOL_INFOA { dwServiceFlags1: DWORD, dwServiceFlags2: DWORD, dwServiceFlags3: DWORD, dwServiceFlags4: DWORD, dwServiceFlags5: DWORD, ProviderId: GUID, dwCatalogEntryId: DWORD, ProtocolChain: WSAPROTOCOLCHAIN, iVersion: c_int, iAddressFamily: c_int, iMaxSockAddr: c_int, iMinSockAddr: c_int, iSocketType: c_int, iProtocol: c_int, iProtocolMaxOffset: c_int, iNetworkByteOrder: c_int, iSecurityScheme: c_int, dwMessageSize: DWORD, dwProviderReserved: DWORD, szProtocol: [CHAR; WSAPROTOCOL_LEN + 1], }} pub type LPWSAPROTOCOL_INFOA = *mut WSAPROTOCOL_INFOA; STRUCT!{struct WSAPROTOCOL_INFOW { dwServiceFlags1: DWORD, dwServiceFlags2: DWORD, dwServiceFlags3: DWORD, dwServiceFlags4: DWORD, dwServiceFlags5: DWORD, ProviderId: GUID, dwCatalogEntryId: DWORD, ProtocolChain: WSAPROTOCOLCHAIN, iVersion: c_int, iAddressFamily: c_int, iMaxSockAddr: c_int, iMinSockAddr: c_int, iSocketType: c_int, iProtocol: c_int, iProtocolMaxOffset: c_int, iNetworkByteOrder: c_int, iSecurityScheme: c_int, dwMessageSize: DWORD, dwProviderReserved: DWORD, szProtocol: [WCHAR; WSAPROTOCOL_LEN + 1], }} pub type LPWSAPROTOCOL_INFOW = *mut WSAPROTOCOL_INFOW; pub const PFL_MULTIPLE_PROTO_ENTRIES: DWORD = 0x00000001; pub const PFL_RECOMMENDED_PROTO_ENTRY: DWORD = 0x00000002; pub const PFL_HIDDEN: DWORD = 0x00000004; pub const PFL_MATCHES_PROTOCOL_ZERO: DWORD = 0x00000008; pub const PFL_NETWORKDIRECT_PROVIDER: DWORD = 0x00000010; pub const XP1_CONNECTIONLESS: DWORD = 0x00000001; pub const XP1_GUARANTEED_DELIVERY: DWORD = 0x00000002; pub const XP1_GUARANTEED_ORDER: DWORD = 0x00000004; pub const XP1_MESSAGE_ORIENTED: DWORD = 0x00000008; pub const XP1_PSEUDO_STREAM: DWORD = 0x00000010; pub const XP1_GRACEFUL_CLOSE: DWORD = 0x00000020; pub const XP1_EXPEDITED_DATA: DWORD = 0x00000040; pub const XP1_CONNECT_DATA: DWORD = 0x00000080; pub const XP1_DISCONNECT_DATA: DWORD = 0x00000100; pub const XP1_SUPPORT_BROADCAST: DWORD = 0x00000200; pub const XP1_SUPPORT_MULTIPOINT: DWORD = 0x00000400; pub const XP1_MULTIPOINT_CONTROL_PLANE: DWORD = 0x00000800; pub const XP1_MULTIPOINT_DATA_PLANE: DWORD = 0x00001000; pub const XP1_QOS_SUPPORTED: DWORD = 0x00002000; pub const XP1_INTERRUPT: DWORD = 0x00004000; pub const XP1_UNI_SEND: DWORD = 0x00008000; pub const XP1_UNI_RECV: DWORD = 0x00010000; pub const XP1_IFS_HANDLES: DWORD = 0x00020000; pub const XP1_PARTIAL_MESSAGE: DWORD = 0x00040000; pub const XP1_SAN_SUPPORT_SDP: DWORD = 0x00080000; pub const BIGENDIAN: DWORD = 0x0000; pub const LITTLEENDIAN: DWORD = 0x0001; pub const SECURITY_PROTOCOL_NONE: DWORD = 0x0000; pub const JL_SENDER_ONLY: DWORD = 0x01; pub const JL_RECEIVER_ONLY: DWORD = 0x02; pub const JL_BOTH: DWORD = 0x04; pub const WSA_FLAG_OVERLAPPED: DWORD = 0x01; pub const WSA_FLAG_MULTIPOINT_C_ROOT: DWORD = 0x02; pub const WSA_FLAG_MULTIPOINT_C_LEAF: DWORD = 0x04; pub const WSA_FLAG_MULTIPOINT_D_ROOT: DWORD = 0x08; pub const WSA_FLAG_MULTIPOINT_D_LEAF: DWORD = 0x10; pub const WSA_FLAG_ACCESS_SYSTEM_SECURITY: DWORD = 0x40; pub const WSA_FLAG_NO_HANDLE_INHERIT: DWORD = 0x80; pub const WSA_FLAG_REGISTERED_IO: DWORD = 0x100; FN!{stdcall LPCONDITIONPROC( lpCallerId: LPWSABUF, lpCallerData: LPWSABUF, lpSQOS: LPQOS, lpGQOS: LPQOS, lpCalleeId: LPWSABUF, lpCalleeData: LPWSABUF, g: *mut GROUP, dwCallbackData: DWORD, ) -> c_int} FN!{stdcall LPWSAOVERLAPPED_COMPLETION_ROUTINE( dwError: DWORD, cbTransferred: DWORD, lpOverlapped: LPWSAOVERLAPPED, dwFlags: DWORD, ) -> ()} ENUM!{enum WSACOMPLETIONTYPE { NSP_NOTIFY_IMMEDIATELY = 0, NSP_NOTIFY_HWND, NSP_NOTIFY_EVENT, NSP_NOTIFY_PORT, NSP_NOTIFY_APC, }} pub type PWSACOMPLETIONTYPE = *mut WSACOMPLETIONTYPE; pub type LPWSACOMPLETIONTYPE = *mut WSACOMPLETIONTYPE; STRUCT!{struct WSACOMPLETION_WindowMessage { hWnd: HWND, uMsg: UINT, context: WPARAM, }} STRUCT!{struct WSACOMPLETION_Event { lpOverlapped: LPWSAOVERLAPPED, }} STRUCT!{struct WSACOMPLETION_Apc { lpOverlapped: LPWSAOVERLAPPED, lpfnCompletionProc: LPWSAOVERLAPPED_COMPLETION_ROUTINE, }} STRUCT!{struct WSACOMPLETION_Port { lpOverlapped: LPWSAOVERLAPPED, hPort: HANDLE, Key: ULONG_PTR, }} UNION!{union WSACOMPLETION_Parameter { [usize; 3], WindowMessage WindowMessage_mut: WSACOMPLETION_WindowMessage, Event Event_mut: WSACOMPLETION_Event, Apc Apc_mut: WSACOMPLETION_Apc, Port Port_mut: WSACOMPLETION_Port, }} STRUCT!{struct WSACOMPLETION { Type: WSACOMPLETIONTYPE, Parameters: WSACOMPLETION_Parameter, }} pub type PWSACOMPLETION = *mut WSACOMPLETION; pub type LPWSACOMPLETION = *mut WSACOMPLETION; pub const TH_NETDEV: DWORD = 0x00000001; pub const TH_TAPI: DWORD = 0x00000002; pub const SERVICE_MULTIPLE: DWORD = 0x00000001; pub const NS_ALL: DWORD = 0; pub const NS_SAP: DWORD = 1; pub const NS_NDS: DWORD = 2; pub const NS_PEER_BROWSE: DWORD = 3; pub const NS_SLP: DWORD = 5; pub const NS_DHCP: DWORD = 6; pub const NS_TCPIP_LOCAL: DWORD = 10; pub const NS_TCPIP_HOSTS: DWORD = 11; pub const NS_DNS: DWORD = 12; pub const NS_NETBT: DWORD = 13; pub const NS_WINS: DWORD = 14; pub const NS_NLA: DWORD = 15; pub const NS_BTH: DWORD = 16; pub const NS_LOCALNAME: DWORD = 19; pub const NS_NBP: DWORD = 20; pub const NS_MS: DWORD = 30; pub const NS_STDA: DWORD = 31; pub const NS_NTDS: DWORD = 32; pub const NS_EMAIL: DWORD = 37; pub const NS_PNRPNAME: DWORD = 38; pub const NS_PNRPCLOUD: DWORD = 39; pub const NS_X500: DWORD = 40; pub const NS_NIS: DWORD = 41; pub const NS_NISPLUS: DWORD = 42; pub const NS_WRQ: DWORD = 50; pub const NS_NETDES: DWORD = 60; pub const RES_UNUSED_1: DWORD = 0x00000001; pub const RES_FLUSH_CACHE: DWORD = 0x00000002; pub const RES_SERVICE: DWORD = 0x00000004; pub const SERVICE_TYPE_VALUE_IPXPORT: &'static str = "IpxSocket"; pub const SERVICE_TYPE_VALUE_SAPID: &'static str = "SapId"; pub const SERVICE_TYPE_VALUE_TCPPORT: &'static str = "TcpPort"; pub const SERVICE_TYPE_VALUE_UDPPORT: &'static str = "UdpPort"; pub const SERVICE_TYPE_VALUE_OBJECTID: &'static str = "ObjectId"; STRUCT!{struct AFPROTOCOLS { iAddressFamily: INT, iProtocol: INT, }} pub type PAFPROTOCOLS = *mut AFPROTOCOLS; pub type LPAFPROTOCOLS = *mut AFPROTOCOLS; ENUM!{enum WSAECOMPARATOR { COMP_EQUAL = 0, COMP_NOTLESS, }} pub type PWSAECOMPARATOR = *mut WSAECOMPARATOR; pub type LPWSAECOMPARATOR = *mut WSAECOMPARATOR; STRUCT!{struct WSAVERSION { dwVersion: DWORD, ecHow: WSAECOMPARATOR, }} pub type PWSAVERSION = *mut WSAVERSION; pub type LPWSAVERSION = *mut WSAVERSION; STRUCT!{struct WSAQUERYSETA { dwSize: DWORD, lpszServiceInstanceName: LPSTR, lpServiceClassId: LPGUID, lpVersion: LPWSAVERSION, lpszComment: LPSTR, dwNameSpace: DWORD, lpNSProviderId: LPGUID, lpszContext: LPSTR, dwNumberOfProtocols: DWORD, lpafpProtocols: LPAFPROTOCOLS, lpszQueryString: LPSTR, dwNumberOfCsAddrs: DWORD, lpcsaBuffer: LPCSADDR_INFO, dwOutputFlags: DWORD, lpBlob: LPBLOB, }} pub type PWSAQUERYSETA = *mut WSAQUERYSETA; pub type LPWSAQUERYSETA = *mut WSAQUERYSETA; STRUCT!{struct WSAQUERYSETW { dwSize: DWORD, lpszServiceInstanceName: LPWSTR, lpServiceClassId: LPGUID, lpVersion: LPWSAVERSION, lpszComment: LPWSTR, dwNameSpace: DWORD, lpNSProviderId: LPGUID, lpszContext: LPWSTR, dwNumberOfProtocols: DWORD, lpafpProtocols: LPAFPROTOCOLS, lpszQueryString: LPWSTR, dwNumberOfCsAddrs: DWORD, lpcsaBuffer: LPCSADDR_INFO, dwOutputFlags: DWORD, lpBlob: LPBLOB, }} pub type PWSAQUERYSETW = *mut WSAQUERYSETW; pub type LPWSAQUERYSETW = *mut WSAQUERYSETW; STRUCT!{struct WSAQUERYSET2A { dwSize: DWORD, lpszServiceInstanceName: LPSTR, lpVersion: LPWSAVERSION, lpszComment: LPSTR, dwNameSpace: DWORD, lpNSProviderId: LPGUID, lpszContext: LPSTR, dwNumberOfProtocols: DWORD, lpafpProtocols: LPAFPROTOCOLS, lpszQueryString: LPSTR, dwNumberOfCsAddrs: DWORD, lpcsaBuffer: LPCSADDR_INFO, dwOutputFlags: DWORD, lpBlob: LPBLOB, }} pub type PWSAQUERYSET2A = *mut WSAQUERYSET2A; pub type LPWSAQUERYSET2A = *mut WSAQUERYSET2A; STRUCT!{struct WSAQUERYSET2W { dwSize: DWORD, lpszServiceInstanceName: LPWSTR, lpVersion: LPWSAVERSION, lpszComment: LPWSTR, dwNameSpace: DWORD, lpNSProviderId: LPGUID, lpszContext: LPWSTR, dwNumberOfProtocols: DWORD, lpafpProtocols: LPAFPROTOCOLS, lpszQueryString: LPWSTR, dwNumberOfCsAddrs: DWORD, lpcsaBuffer: LPCSADDR_INFO, dwOutputFlags: DWORD, lpBlob: LPBLOB, }} pub type PWSAQUERYSET2W = *mut WSAQUERYSET2W; pub type LPWSAQUERYSET2W = *mut WSAQUERYSET2W; pub const LUP_DEEP: DWORD = 0x0001; pub const LUP_CONTAINERS: DWORD = 0x0002; pub const LUP_NOCONTAINERS: DWORD = 0x0004; pub const LUP_NEAREST: DWORD = 0x0008; pub const LUP_RETURN_NAME: DWORD = 0x0010; pub const LUP_RETURN_TYPE: DWORD = 0x0020; pub const LUP_RETURN_VERSION: DWORD = 0x0040; pub const LUP_RETURN_COMMENT: DWORD = 0x0080; pub const LUP_RETURN_ADDR: DWORD = 0x0100; pub const LUP_RETURN_BLOB: DWORD = 0x0200; pub const LUP_RETURN_ALIASES: DWORD = 0x0400; pub const LUP_RETURN_QUERY_STRING: DWORD = 0x0800; pub const LUP_RETURN_ALL: DWORD = 0x0FF0; pub const LUP_RES_SERVICE: DWORD = 0x8000; pub const LUP_FLUSHCACHE: DWORD = 0x1000; pub const LUP_FLUSHPREVIOUS: DWORD = 0x2000; pub const LUP_NON_AUTHORITATIVE: DWORD = 0x4000; pub const LUP_SECURE: DWORD = 0x8000; pub const LUP_RETURN_PREFERRED_NAMES: DWORD = 0x10000; pub const LUP_DNS_ONLY: DWORD = 0x20000; pub const LUP_ADDRCONFIG: DWORD = 0x00100000; pub const LUP_DUAL_ADDR: DWORD = 0x00200000; pub const LUP_FILESERVER: DWORD = 0x00400000; pub const LUP_DISABLE_IDN_ENCODING: DWORD = 0x00800000; pub const LUP_API_ANSI: DWORD = 0x01000000; pub const LUP_RESOLUTION_HANDLE: DWORD = 0x80000000; pub const RESULT_IS_ALIAS: DWORD = 0x0001; pub const RESULT_IS_ADDED: DWORD = 0x0010; pub const RESULT_IS_CHANGED: DWORD = 0x0020; pub const RESULT_IS_DELETED: DWORD = 0x0040; ENUM!{enum WSAESETSERVICEOP { RNRSERVICE_REGISTER = 0, RNRSERVICE_DEREGISTER, RNRSERVICE_DELETE, }} pub type PWSAESETSERVICEOP = *mut WSAESETSERVICEOP; pub type LPWSAESETSERVICEOP = *mut WSAESETSERVICEOP; STRUCT!{struct WSANSCLASSINFOA { lpszName: LPSTR, dwNameSpace: DWORD, dwValueType: DWORD, dwValueSize: DWORD, lpValue: LPVOID, }} pub type PWSANSCLASSINFOA = *mut WSANSCLASSINFOA; pub type LPWSANSCLASSINFOA = *mut WSANSCLASSINFOA; STRUCT!{struct WSANSCLASSINFOW { lpszName: LPWSTR, dwNameSpace: DWORD, dwValueType: DWORD, dwValueSize: DWORD, lpValue: LPVOID, }} pub type PWSANSCLASSINFOW = *mut WSANSCLASSINFOW; pub type LPWSANSCLASSINFOW = *mut WSANSCLASSINFOW; STRUCT!{struct WSASERVICECLASSINFOA { lpServiceClassId: LPGUID, lpszServiceClassName: LPSTR, dwCount: DWORD, lpClassInfos: LPWSANSCLASSINFOA, }} pub type PWSASERVICECLASSINFOA = *mut WSASERVICECLASSINFOA; pub type LPWSASERVICECLASSINFOA = *mut WSASERVICECLASSINFOA; STRUCT!{struct WSASERVICECLASSINFOW { lpServiceClassId: LPGUID, lpszServiceClassName: LPWSTR, dwCount: DWORD, lpClassInfos: LPWSANSCLASSINFOW, }} pub type PWSASERVICECLASSINFOW = *mut WSASERVICECLASSINFOW; pub type LPWSASERVICECLASSINFOW = *mut WSASERVICECLASSINFOW; STRUCT!{struct WSANAMESPACE_INFOA { NSProviderId: GUID, dwNameSpace: DWORD, fActive: BOOL, dwVersion: DWORD, lpszIdentifier: LPSTR, }} pub type PWSANAMESPACE_INFOA = *mut WSANAMESPACE_INFOA; pub type LPWSANAMESPACE_INFOA = *mut WSANAMESPACE_INFOA; STRUCT!{struct WSANAMESPACE_INFOW { NSProviderId: GUID, dwNameSpace: DWORD, fActive: BOOL, dwVersion: DWORD, lpszIdentifier: LPWSTR, }} pub type PWSANAMESPACE_INFOW = *mut WSANAMESPACE_INFOW; pub type LPWSANAMESPACE_INFOW = *mut WSANAMESPACE_INFOW; STRUCT!{struct WSANAMESPACE_INFOEXA { NSProviderId: GUID, dwNameSpace: DWORD, fActive: BOOL, dwVersion: DWORD, lpszIdentifier: LPSTR, ProviderSpecific: BLOB, }} pub type PWSANAMESPACE_INFOEXA = *mut WSANAMESPACE_INFOEXA; pub type LPWSANAMESPACE_INFOEXA = *mut WSANAMESPACE_INFOEXA; STRUCT!{struct WSANAMESPACE_INFOEXW { NSProviderId: GUID, dwNameSpace: DWORD, fActive: BOOL, dwVersion: DWORD, lpszIdentifier: LPWSTR, ProviderSpecific: BLOB, }} pub type PWSANAMESPACE_INFOEXW = *mut WSANAMESPACE_INFOEXW; pub type LPWSANAMESPACE_INFOEXW = *mut WSANAMESPACE_INFOEXW; pub const POLLRDNORM: SHORT = 0x0100; pub const POLLRDBAND: SHORT = 0x0200; pub const POLLIN: SHORT = POLLRDNORM | POLLRDBAND; pub const POLLPRI: SHORT = 0x0400; pub const POLLWRNORM: SHORT = 0x0010; pub const POLLOUT: SHORT = POLLWRNORM; pub const POLLWRBAND: SHORT = 0x0020; pub const POLLERR: SHORT = 0x0001; pub const POLLHUP: SHORT = 0x0002; pub const POLLNVAL: SHORT = 0x0004; STRUCT!{struct WSAPOLLFD { fd: SOCKET, events: SHORT, revents: SHORT, }} pub type PWSAPOLLFD = *mut WSAPOLLFD; pub type LPWSAPOLLFD = *mut WSAPOLLFD; extern "system" { pub fn accept( s: SOCKET, addr: *mut SOCKADDR, addrlen: *mut c_int, ) -> SOCKET; pub fn bind(s: SOCKET, name: *const SOCKADDR, namelen: c_int, ) -> c_int; pub fn closesocket( s: SOCKET, ) -> c_int; pub fn connect( s: SOCKET, name: *const SOCKADDR, namelen: c_int, ) -> c_int; pub fn ioctlsocket( s: SOCKET, cmd: c_long, argp: *mut u_long, ) -> c_int; pub fn getpeername( s: SOCKET, name: *mut SOCKADDR, namelen: *mut c_int, ) -> c_int; pub fn getsockname( s: SOCKET, name: *mut SOCKADDR, namelen: *mut c_int, ) -> c_int; pub fn getsockopt( s: SOCKET, level: c_int, optname: c_int, optval: *mut c_char, optlen: *mut c_int, ) -> c_int; pub fn htonl( hostlong: u_long, ) -> u_long; pub fn htons( hostshort: u_short, ) -> u_short; pub fn inet_addr( cp: *const c_char, ) -> c_ulong; pub fn inet_ntoa( _in: in_addr, ) -> *mut c_char; } #[inline] pub fn _WS2_32_WINSOCK_SWAP_LONG(l: __uint32) -> __uint32 { ((l >> 24) & 0x000000FF) | ((l >> 8) & 0x0000FF00) | ((l << 8) & 0x00FF0000) | ((l << 24) & 0xFF000000) } #[inline] pub fn _WS2_32_WINSOCK_SWAP_LONGLONG(l: __uint64) -> __uint64 { ((l >> 56) & 0x00000000000000FF) | ((l >> 40) & 0x000000000000FF00) | ((l >> 24) & 0x0000000000FF0000) | ((l >> 8) & 0x00000000FF000000) | ((l << 8) & 0x000000FF00000000) | ((l << 24) & 0x0000FF0000000000) | ((l << 40) & 0x00FF000000000000) | ((l << 56) & 0xFF00000000000000) } #[inline] pub fn htonll(Value: __uint64) -> __uint64 { _WS2_32_WINSOCK_SWAP_LONGLONG(Value) } #[inline] pub fn ntohll(Value: __uint64) -> __uint64 { _WS2_32_WINSOCK_SWAP_LONGLONG(Value) } #[inline] pub fn htonf(Value: c_float) -> __uint32 { let Tempval: __uint32 = unsafe { ::core::mem::transmute(Value) }; _WS2_32_WINSOCK_SWAP_LONG(Tempval) } #[inline] pub fn ntohf(Value: __uint32) -> c_float { let Tempval = _WS2_32_WINSOCK_SWAP_LONG(Value); unsafe { ::core::mem::transmute(Tempval) } } #[inline] pub fn htond(Value: c_double) -> __uint64 { let Tempval: __uint64 = unsafe { ::core::mem::transmute(Value) }; _WS2_32_WINSOCK_SWAP_LONGLONG(Tempval) } #[inline] pub fn ntohd(Value: __uint64) -> c_double { let Tempval = _WS2_32_WINSOCK_SWAP_LONGLONG(Value); unsafe { ::core::mem::transmute(Tempval) } } extern "system" { pub fn listen( s: SOCKET, backlog: c_int, ) -> c_int; pub fn ntohl( netlong: u_long, ) -> u_long; pub fn ntohs( netshort: u_short, ) -> u_short; pub fn recv( s: SOCKET, buf: *mut c_char, len: c_int, flags: c_int, ) -> c_int; pub fn recvfrom( s: SOCKET, buf: *mut c_char, len: c_int, flags: c_int, from: *mut SOCKADDR, fromlen: *mut c_int, ) -> c_int; pub fn select( nfds: c_int, readfds: *mut fd_set, writefds: *mut fd_set, exceptfds: *mut fd_set, timeout: *const timeval, ) -> c_int; pub fn send( s: SOCKET, buf: *const c_char, len: c_int, flags: c_int, ) -> c_int; pub fn sendto( s: SOCKET, buf: *const c_char, len: c_int, flags: c_int, to: *const SOCKADDR, tolen: c_int, ) -> c_int; pub fn setsockopt( s: SOCKET, level: c_int, optname: c_int, optval: *const c_char, optlen: c_int, ) -> c_int; pub fn shutdown( s: SOCKET, how: c_int, ) -> c_int; pub fn socket( af: c_int, _type: c_int, protocol: c_int, ) -> SOCKET; pub fn gethostbyaddr( addr: *const c_char, len: c_int, _type: c_int, ) -> *mut hostent; pub fn gethostbyname( name: *const c_char, ) -> *mut hostent; pub fn gethostname( name: *mut c_char, namelen: c_int, ) -> c_int; pub fn GetHostNameW( name: PWSTR, namelen: c_int, ) -> c_int; pub fn getservbyport( port: c_int, proto: *const c_char, ) -> *mut servent; pub fn getservbyname( name: *const c_char, proto: *const c_char, ) -> *mut servent; pub fn getprotobynumber( number: c_int, ) -> *mut protoent; pub fn getprotobyname( name: *const c_char, ) -> *mut protoent; pub fn WSAStartup( wVersionRequested: WORD, lpWSAData: LPWSADATA, ) -> c_int; pub fn WSACleanup() -> c_int; pub fn WSASetLastError( iError: c_int, ); pub fn WSAGetLastError() -> c_int; pub fn WSAIsBlocking() -> BOOL; pub fn WSAUnhookBlockingHook() -> c_int; pub fn WSASetBlockingHook( lpBlockFunc: FARPROC, ) -> FARPROC; pub fn WSACancelBlockingCall() -> c_int; pub fn WSAAsyncGetServByName( hWnd: HWND, wMsg: u_int, name: *const c_char, proto: *const c_char, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSAAsyncGetServByPort( hWnd: HWND, wMsg: u_int, port: c_int, proto: *const c_char, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSAAsyncGetProtoByName( hWnd: HWND, wMsg: u_int, name: *const c_char, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSAAsyncGetProtoByNumber( hWnd: HWND, wMsg: u_int, number: c_int, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSAAsyncGetHostByName( hWnd: HWND, wMsg: u_int, name: *const c_char, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSAAsyncGetHostByAddr( hWnd: HWND, wMsg: u_int, addr: *const c_char, len: c_int, _type: c_int, buf: *mut c_char, buflen: c_int, ) -> HANDLE; pub fn WSACancelAsyncRequest( hAsyncTaskHandle: HANDLE, ) -> c_int; pub fn WSAAsyncSelect( s: SOCKET, hWnd: HWND, wMsg: u_int, lEvent: c_long, ) -> c_int; pub fn WSAAccept( s: SOCKET, addr: *mut SOCKADDR, addrlen: LPINT, lpfnCondition: LPCONDITIONPROC, dwCallbackData: DWORD_PTR, ) -> SOCKET; pub fn WSACloseEvent( hEvent: WSAEVENT, ) -> BOOL; pub fn WSAConnect( s: SOCKET, name: *const SOCKADDR, namelen: c_int, lpCallerData: LPWSABUF, lpCalleeData: LPWSABUF, lpSQOS: LPQOS, lpGQOS: LPQOS, ) -> c_int; pub fn WSAConnectByNameW( s: SOCKET, nodename: LPWSTR, servicename: LPWSTR, LocalAddressLength: LPDWORD, LocalAddress: LPSOCKADDR, RemoteAddressLength: LPDWORD, RemoteAddress: LPSOCKADDR, timeout: *const timeval, Reserved: LPWSAOVERLAPPED, ) -> BOOL; pub fn WSAConnectByNameA( s: SOCKET, nodename: LPCSTR, servicename: LPCSTR, LocalAddressLength: LPDWORD, LocalAddress: LPSOCKADDR, RemoteAddressLength: LPDWORD, RemoteAddress: LPSOCKADDR, timeout: *const timeval, Reserved: LPWSAOVERLAPPED, ) -> BOOL; pub fn WSAConnectByList( s: SOCKET, SocketAddress: PSOCKET_ADDRESS_LIST, LocalAddressLength: LPDWORD, LocalAddress: LPSOCKADDR, RemoteAddressLength: LPDWORD, RemoteAddress: LPSOCKADDR, timeout: *const timeval, Reserved: LPWSAOVERLAPPED, ) -> BOOL; pub fn WSACreateEvent() -> WSAEVENT; pub fn WSADuplicateSocketA( s: SOCKET, dwProcessId: DWORD, lpProtocolInfo: LPWSAPROTOCOL_INFOA, ) -> c_int; pub fn WSADuplicateSocketW( s: SOCKET, dwProcessId: DWORD, lpProtocolInfo: LPWSAPROTOCOL_INFOW, ) -> c_int; pub fn WSAEnumNetworkEvents( s: SOCKET, hEventObject: WSAEVENT, lpNetworkEvents: LPWSANETWORKEVENTS, ) -> c_int; pub fn WSAEnumProtocolsA( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOA, lpdwBufferLength: LPDWORD, ) -> c_int; pub fn WSAEnumProtocolsW( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOW, lpdwBufferLength: LPDWORD, ) -> c_int; pub fn WSAEventSelect( s: SOCKET, hEventObject: WSAEVENT, lNetworkEvents: c_long, ) -> c_int; pub fn WSAGetOverlappedResult( s: SOCKET, lpOverlapped: LPWSAOVERLAPPED, lpcbTransfer: LPDWORD, fWait: BOOL, lpdwFlags: LPDWORD, ) -> BOOL; pub fn WSAGetQOSByName( s: SOCKET, lpQOSName: LPWSABUF, lpQOS: LPQOS, ) -> BOOL; pub fn WSAHtonl( s: SOCKET, hostlong: u_long, lpnetlong: *mut u_long, ) -> c_int; pub fn WSAHtons(s: SOCKET, hostshort: u_short, lpnetshort: *mut u_short, ) -> c_int; pub fn WSAIoctl( s: SOCKET, dwIoControlCode: DWORD, lpvInBuffer: LPVOID, cbInBuffer: DWORD, lpvOutBuffer: LPVOID, cbOutBuffer: DWORD, lpcbBytesReturned: LPDWORD, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSAJoinLeaf( s: SOCKET, name: *const SOCKADDR, namelen: c_int, lpCallerData: LPWSABUF, lpCalleeData: LPWSABUF, lpSQOS: LPQOS, lpGQOS: LPQOS, dwFlags: DWORD, ) -> SOCKET; pub fn WSANtohl( s: SOCKET, netlong: u_long, lphostlong: *mut c_long, ) -> c_int; pub fn WSANtohs( s: SOCKET, netshort: u_short, lphostshort: *mut c_short, ) -> c_int; pub fn WSARecv( s: SOCKET, lpBuffers: LPWSABUF, dwBufferCount: DWORD, lpNumberOfBytesRecvd: LPDWORD, lpFlags: LPDWORD, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSARecvDisconnect( s: SOCKET, lpInboundDisconnectData: LPWSABUF, ) -> c_int; pub fn WSARecvFrom( s: SOCKET, lpBuffers: LPWSABUF, dwBufferCount: DWORD, lpNumberOfBytesRecvd: LPDWORD, lpFlags: LPDWORD, lpFrom: *mut SOCKADDR, lpFromlen: LPINT, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSAResetEvent( hEvent: WSAEVENT, ) -> BOOL; pub fn WSASend( s: SOCKET, lpBuffers: LPWSABUF, dwBufferCount: DWORD, lpNumberOfBytesSent: LPDWORD, dwFlags: DWORD, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSASendMsg( Handle: SOCKET, lpMsg: LPWSAMSG, dwFlags: DWORD, lpNumberOfBytesSent: LPDWORD, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSASendDisconnect( s: SOCKET, lpOutboundDisconnectData: LPWSABUF, ) -> c_int; pub fn WSASendTo( s: SOCKET, lpBuffers: LPWSABUF, dwBufferCount: DWORD, lpNumberOfBytesSent: LPDWORD, dwFlags: DWORD, lpTo: *const SOCKADDR, iToLen: c_int, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int; pub fn WSASetEvent( hEvent: WSAEVENT, ) -> BOOL; pub fn WSASocketA( af: c_int, _type: c_int, protocol: c_int, lpProtocolInfo: LPWSAPROTOCOL_INFOA, g: GROUP, dwFlags: DWORD, ) -> SOCKET; pub fn WSASocketW( af: c_int, _type: c_int, protocol: c_int, lpProtocolInfo: LPWSAPROTOCOL_INFOW, g: GROUP, dwFlags: DWORD, ) -> SOCKET; pub fn WSAWaitForMultipleEvents( cEvents: DWORD, lphEvents: *const WSAEVENT, fWaitAll: BOOL, dwTimeout: DWORD, fAlertable: BOOL, ) -> DWORD; pub fn WSAAddressToStringA( lpsaAddress: LPSOCKADDR, dwAddressLength: DWORD, lpProtocolInfo: LPWSAPROTOCOL_INFOA, lpszAddressString: LPSTR, lpdwAddressStringLength: LPDWORD, ) -> INT; pub fn WSAAddressToStringW( lpsaAddress: LPSOCKADDR, dwAddressLength: DWORD, lpProtocolInfo: LPWSAPROTOCOL_INFOW, lpszAddressString: LPWSTR, lpdwAddressStringLength: LPDWORD, ) -> INT; pub fn WSAStringToAddressA( AddressString: LPSTR, AddressFamily: INT, lpProtocolInfo: LPWSAPROTOCOL_INFOA, lpAddress: LPSOCKADDR, lpAddressLength: LPINT, ) -> INT; pub fn WSAStringToAddressW( AddressString: LPWSTR, AddressFamily: INT, lpProtocolInfo: LPWSAPROTOCOL_INFOW, lpAddress: LPSOCKADDR, lpAddressLength: LPINT, ) -> INT; pub fn WSALookupServiceBeginA( lpqsRestrictions: LPWSAQUERYSETA, dwControlFlags: DWORD, lphLookup: LPHANDLE, ) -> INT; pub fn WSALookupServiceBeginW( lpqsRestrictions: LPWSAQUERYSETW, dwControlFlags: DWORD, lphLookup: LPHANDLE, ) -> INT; pub fn WSALookupServiceNextA( hLookup: HANDLE, dwControlFlags: DWORD, lpdwBufferLength: LPDWORD, lpqsResults: LPWSAQUERYSETA, ) -> INT; pub fn WSALookupServiceNextW( hLookup: HANDLE, dwControlFlags: DWORD, lpdwBufferLength: LPDWORD, lpqsResults: LPWSAQUERYSETW, ) -> INT; pub fn WSANSPIoctl( hLookup: HANDLE, dwControlFlags: DWORD, lpvInBuffer: LPVOID, cbInBuffer: DWORD, lpvOutBuffer: LPVOID, cbOutBuffer: DWORD, lpcbBytesReturned: LPDWORD, lpCompletion: LPWSACOMPLETION, ) -> INT; pub fn WSALookupServiceEnd( hLookup: HANDLE, ) -> INT; pub fn WSAInstallServiceClassA( lpServiceClassInfo: LPWSASERVICECLASSINFOA, ) -> INT; pub fn WSAInstallServiceClassW( lpServiceClassInfo: LPWSASERVICECLASSINFOW, ) -> INT; pub fn WSARemoveServiceClass( lpServiceClassId: LPGUID, ) -> INT; pub fn WSAGetServiceClassInfoA( lpProviderId: LPGUID, lpServiceClassId: LPGUID, lpdwBufSize: LPDWORD, lpServiceClassInfo: LPWSASERVICECLASSINFOA, ) -> INT; pub fn WSAGetServiceClassInfoW( lpProviderId: LPGUID, lpServiceClassId: LPGUID, lpdwBufSize: LPDWORD, lpServiceClassInfo: LPWSASERVICECLASSINFOW, ) -> INT; pub fn WSAEnumNameSpaceProvidersA( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOA, ) -> INT; pub fn WSAEnumNameSpaceProvidersW( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOW, ) -> INT; pub fn WSAEnumNameSpaceProvidersExA( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXA, ) -> INT; pub fn WSAEnumNameSpaceProvidersExW( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXW, ) -> INT; pub fn WSAGetServiceClassNameByClassIdA( lpServiceClassId: LPGUID, lpszServiceClassName: LPSTR, lpdwBufferLength: LPDWORD, ) -> INT; pub fn WSAGetServiceClassNameByClassIdW( lpServiceClassId: LPGUID, lpszServiceClassName: LPWSTR, lpdwBufferLength: LPDWORD, ) -> INT; pub fn WSASetServiceA( lpqsRegInfo: LPWSAQUERYSETA, essoperation: WSAESETSERVICEOP, dwControlFlags: DWORD, ) -> INT; pub fn WSASetServiceW( lpqsRegInfo: LPWSAQUERYSETW, essoperation: WSAESETSERVICEOP, dwControlFlags: DWORD, ) -> INT; pub fn WSAProviderConfigChange( lpNotificationHandle: LPHANDLE, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> INT; pub fn WSAPoll( fdArray: LPWSAPOLLFD, fds: ULONG, timeout: INT, ) -> c_int; } pub type LPSOCKADDR_IN = *mut SOCKADDR_IN; pub type LINGER = linger; pub type PLINGER = *mut linger; pub type LPLINGER = *mut linger; pub type FD_SET = fd_set; pub type PFD_SET = *mut fd_set; pub type LPFD_SET = *mut fd_set; pub type HOSTENT = hostent; pub type PHOSTENT = *mut hostent; pub type LPHOSTENT = *mut hostent; pub type SERVENT = servent; pub type PSERVENT = *mut servent; pub type LPSERVENT = *mut servent; pub type PROTOENT = protoent; pub type PPROTOENT = *mut protoent; pub type LPPROTOENT = *mut protoent; pub type TIMEVAL = timeval; pub type PTIMEVAL = *mut timeval; pub type LPTIMEVAL = *mut timeval; #[inline] pub fn WSAMAKEASYNCREPLY(buflen: WORD, error: WORD) -> LONG { MAKELONG(buflen, error) } #[inline] pub fn WSAMAKESELECTREPLY(event: WORD, error: WORD) -> LONG { MAKELONG(event, error) } #[inline] pub fn WSAGETASYNCBUFLEN(lParam: DWORD) -> WORD { LOWORD(lParam) } #[inline] pub fn WSAGETASYNCERROR(lParam: DWORD) -> WORD { HIWORD(lParam) } #[inline] pub fn WSAGETSELECTEVENT(lParam: DWORD) -> WORD { LOWORD(lParam) } #[inline] pub fn WSAGETSELECTERROR(lParam: DWORD) -> WORD { HIWORD(lParam) }