// Copyright © 2015, Peter Atashian // Licensed under the MIT License //! FFI bindings to ws2_32. #![cfg(windows)] extern crate winapi; use winapi::*; extern "system" { pub fn FreeAddrInfoEx(pAddrInfoEx: PADDRINFOEXA); pub fn FreeAddrInfoExW(pAddrInfoEx: PADDRINFOEXW); pub fn FreeAddrInfoW(pAddrInfo: PADDRINFOW); pub fn GetAddrInfoExA( pName: PCSTR, pServiceName: PCSTR, dwNameSpace: DWORD, lpNspId: LPGUID, hints: *const ADDRINFOEXA, ppResult: *mut PADDRINFOEXA, timeout: *mut timeval, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE, lpNameHandle: LPHANDLE, ) -> INT; pub fn GetAddrInfoExCancel(lpHandle: LPHANDLE) -> INT; pub fn GetAddrInfoExOverlappedResult(lpOverlapped: LPOVERLAPPED) -> INT; pub fn GetAddrInfoExW( pName: PCWSTR, pServiceName: PCWSTR, dwNameSpace: DWORD, lpNspId: LPGUID, hints: *const ADDRINFOEXW, ppResult: *mut PADDRINFOEXW, timeout: *mut timeval, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE, lpNameHandle: LPHANDLE, ) -> INT; pub fn GetAddrInfoW( pNodeName: PCWSTR, pServiceName: PCWSTR, pHints: *const ADDRINFOW, ppResult: *mut PADDRINFOW, ) -> INT; pub fn GetHostNameW(name: PWSTR, namelen: c_int) -> c_int; pub fn GetNameInfoW( pSockaddr: *const SOCKADDR, SockaddrLength: socklen_t, pNodeBuffer: PWCHAR, NodeBufferSize: DWORD, pServiceBuffer: PWCHAR, ServiceBufferSize: DWORD, Flags: INT, ) -> INT; pub fn InetNtopW(Family: INT, pAddr: PVOID, pStringBuf: PWSTR, StringBufSize: size_t) -> PCWSTR; pub fn InetPtonW(Family: INT, pszAddrString: PCWSTR, pAddrBuf: PVOID) -> INT; pub fn SetAddrInfoExA( pName: PCSTR, pServiceName: PCSTR, pAddresses: *mut SOCKET_ADDRESS, dwAddressCount: DWORD, lpBlob: LPBLOB, dwFlags: DWORD, dwNameSpace: DWORD, lpNspId: LPGUID, timeout: *mut timeval, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE, lpNameHandle: LPHANDLE, ) -> INT; pub fn SetAddrInfoExW( pName: PCWSTR, pServiceName: PCWSTR, pAddresses: *mut SOCKET_ADDRESS, dwAddressCount: DWORD, lpBlob: LPBLOB, dwFlags: DWORD, dwNameSpace: DWORD, lpNspId: LPGUID, timeout: *mut timeval, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE, lpNameHandle: LPHANDLE, ) -> INT; // pub fn WEP(); pub fn WPUCompleteOverlappedRequest( s: SOCKET, lpOverlapped: LPWSAOVERLAPPED, dwError: DWORD, cbTransferred: DWORD, lpErrno: LPINT, ) -> c_int; // pub fn WPUGetProviderPathEx(); pub fn WSAAccept( s: SOCKET, addr: *mut SOCKADDR, addrlen: LPINT, lpfnCondition: LPCONDITIONPROC, dwCallbackData: DWORD_PTR, ) -> SOCKET; 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 WSAAdvertiseProvider( puuidProviderId: *const GUID, pNSPv2Routine: *const LPCNSPV2_ROUTINE, ) -> INT; 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 WSAAsyncGetHostByName( hWnd: HWND, wMsg: u_int, name: *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 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 WSAAsyncSelect(s: SOCKET, hWnd: HWND, wMsg: u_int, lEvent: c_long) -> c_int; pub fn WSACancelAsyncRequest(hAsyncTaskHandle: HANDLE) -> c_int; pub fn WSACancelBlockingCall() -> c_int; pub fn WSACleanup() -> c_int; 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 WSAConnectByList( s: SOCKET, SocketAddress: PSOCKET_ADDRESS_LIST, 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 WSAConnectByNameW( s: SOCKET, nodename: LPWSTR, servicename: LPWSTR, 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 WSAEnumNameSpaceProvidersA( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOA, ) -> INT; pub fn WSAEnumNameSpaceProvidersExA( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXA, ) -> INT; pub fn WSAEnumNameSpaceProvidersExW( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXW, ) -> INT; pub fn WSAEnumNameSpaceProvidersW( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOW, ) -> 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 WSAGetLastError() -> 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 WSAGetServiceClassInfoA( lpProviderId: LPGUID, lpServiceClassId: LPGUID, lpdwBufSize: LPDWORD, lpServiceClassInfo: LPWSASERVICECLASSINFOA, ) -> INT; pub fn WSAGetServiceClassInfoW( lpProviderId: LPGUID, lpServiceClassId: LPGUID, lpdwBufSize: LPDWORD, lpServiceClassInfo: LPWSASERVICECLASSINFOW, ) -> INT; pub fn WSAGetServiceClassNameByClassIdA( lpServiceClassId: LPGUID, lpszServiceClassName: LPSTR, lpdwBufferLength: LPDWORD, ) -> INT; pub fn WSAGetServiceClassNameByClassIdW( lpServiceClassId: LPGUID, lpszServiceClassName: LPWSTR, lpdwBufferLength: LPDWORD, ) -> INT; 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 WSAInstallServiceClassA(lpServiceClassInfo: LPWSASERVICECLASSINFOA) -> INT; pub fn WSAInstallServiceClassW(lpServiceClassInfo: LPWSASERVICECLASSINFOW) -> 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 WSAIsBlocking() -> BOOL; pub fn WSAJoinLeaf( s: SOCKET, name: *const SOCKADDR, namelen: c_int, lpCallerData: LPWSABUF, lpCalleeData: LPWSABUF, lpSQOS: LPQOS, lpGQOS: LPQOS, dwFlags: DWORD, ) -> SOCKET; pub fn WSALookupServiceBeginA( lpqsRestrictions: LPWSAQUERYSETA, dwControlFlags: DWORD, lphLookup: LPHANDLE, ) -> INT; pub fn WSALookupServiceBeginW( lpqsRestrictions: LPWSAQUERYSETW, dwControlFlags: DWORD, lphLookup: LPHANDLE, ) -> INT; pub fn WSALookupServiceEnd(hLookup: HANDLE) -> 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 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 WSAPoll(fdArray: LPWSAPOLLFD, fds: ULONG, timeout: INT) -> c_int; pub fn WSAProviderCompleteAsyncCall(hAsyncCall: HANDLE, iRetCode: INT) -> INT; pub fn WSAProviderConfigChange( lpNotificationHandle: LPHANDLE, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> 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 WSARemoveServiceClass(lpServiceClassId: LPGUID) -> 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 WSASendDisconnect(s: SOCKET, lpOutboundDisconnectData: LPWSABUF) -> c_int; pub fn WSASendMsg( Handle: SOCKET, lpMsg: LPWSAMSG, dwFlags: DWORD, lpNumberOfBytesSent: LPDWORD, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> 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 WSASetBlockingHook(lpBlockFunc: FARPROC) -> FARPROC; pub fn WSASetEvent(hEvent: WSAEVENT) -> BOOL; pub fn WSASetLastError(iError: c_int); pub fn WSASetServiceA( lpqsRegInfo: LPWSAQUERYSETA, essoperation: WSAESETSERVICEOP, dwControlFlags: DWORD, ) -> INT; pub fn WSASetServiceW( lpqsRegInfo: LPWSAQUERYSETW, essoperation: WSAESETSERVICEOP, dwControlFlags: DWORD, ) -> INT; 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 WSAStartup(wVersionRequested: WORD, lpWSAData: LPWSADATA) -> c_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 WSAUnadvertiseProvider(puuidProviderId: *const GUID) -> INT; pub fn WSAUnhookBlockingHook() -> c_int; pub fn WSAWaitForMultipleEvents( cEvents: DWORD, lphEvents: *const WSAEVENT, fWaitAll: BOOL, dwTimeout: DWORD, fAlertable: BOOL, ) -> DWORD; pub fn WSCDeinstallProvider(lpProviderId: LPGUID, lpErrno: LPINT) -> c_int; // pub fn WSCDeinstallProviderEx(); pub fn WSCEnableNSProvider(lpProviderId: LPGUID, fEnable: BOOL) -> INT; pub fn WSCEnumProtocols( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOW, lpdwBufferLength: LPDWORD, lpErrno: LPINT, ) -> c_int; // pub fn WSCEnumProtocolsEx(); pub fn WSCGetApplicationCategory( Path: LPCWSTR, PathLength: DWORD, Extra: LPCWSTR, ExtraLength: DWORD, pPermittedLspCategories: *mut DWORD, lpErrno: LPINT, ) -> c_int; // pub fn WSCGetApplicationCategoryEx(); pub fn WSCGetProviderInfo( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: *mut size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCGetProviderPath( lpProviderId: LPGUID, lpszProviderDllPath: *mut WCHAR, lpProviderDllPathLen: LPINT, lpErrno: LPINT, ) -> c_int; pub fn WSCInstallNameSpace( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, ) -> INT; pub fn WSCInstallNameSpaceEx( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, lpProviderSpecific: LPBLOB, ) -> INT; // pub fn WSCInstallNameSpaceEx2(); pub fn WSCInstallProvider( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int; // pub fn WSCInstallProviderEx(); pub fn WSCSetApplicationCategory( Path: LPCWSTR, PathLength: DWORD, Extra: LPCWSTR, ExtraLength: DWORD, PermittedLspCategories: DWORD, pPrevPermLspCat: *mut DWORD, lpErrno: LPINT, ) -> c_int; // pub fn WSCSetApplicationCategoryEx(); pub fn WSCSetProviderInfo( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCUnInstallNameSpace(lpProviderId: LPGUID) -> INT; // pub fn WSCUnInstallNameSpaceEx2(); pub fn WSCUpdateProvider( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int; // pub fn WSCUpdateProviderEx(); pub fn WSCWriteNameSpaceOrder(lpProviderId: LPGUID, dwNumberOfEntries: DWORD) -> c_int; pub fn WSCWriteProviderOrder(lpwdCatalogEntryId: LPDWORD, dwNumberOfEntries: DWORD) -> c_int; // pub fn WSCWriteProviderOrderEx(); // pub fn WahCloseApcHelper(); // pub fn WahCloseHandleHelper(); // pub fn WahCloseNotificationHandleHelper(); // pub fn WahCloseSocketHandle(); // pub fn WahCloseThread(); // pub fn WahCompleteRequest(); // pub fn WahCreateHandleContextTable(); // pub fn WahCreateNotificationHandle(); // pub fn WahCreateSocketHandle(); // pub fn WahDestroyHandleContextTable(); // pub fn WahDisableNonIFSHandleSupport(); // pub fn WahEnableNonIFSHandleSupport(); // pub fn WahEnumerateHandleContexts(); // pub fn WahInsertHandleContext(); // pub fn WahNotifyAllProcesses(); // pub fn WahOpenApcHelper(); // pub fn WahOpenCurrentThread(); // pub fn WahOpenHandleHelper(); // pub fn WahOpenNotificationHandleHelper(); // pub fn WahQueueUserApc(); // pub fn WahReferenceContextByHandle(); // pub fn WahRemoveHandleContext(); // pub fn WahWaitForNotification(); // pub fn WahWriteLSPEvent(); pub fn __WSAFDIsSet(fd: SOCKET, _: *mut fd_set) -> c_int; 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 freeaddrinfo(pAddrInfo: PADDRINFOA); pub fn getaddrinfo( pNodeName: PCSTR, pServiceName: PCSTR, pHints: *const ADDRINFOA, ppResult: *mut PADDRINFOA, ) -> INT; 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 getnameinfo( pSockaddr: *const SOCKADDR, SockaddrLength: socklen_t, pNodeBuffer: PCHAR, NodeBufferSize: DWORD, pServiceBuffer: PCHAR, ServiceBufferSize: DWORD, Flags: INT, ) -> INT; pub fn getpeername(s: SOCKET, name: *mut SOCKADDR, namelen: *mut c_int) -> c_int; pub fn getprotobyname(name: *const c_char) -> *mut protoent; pub fn getprotobynumber(number: c_int) -> *mut protoent; pub fn getservbyname(name: *const c_char, proto: *const c_char) -> *mut servent; pub fn getservbyport(port: c_int, proto: *const c_char) -> *mut servent; 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; pub fn inet_ntop(Family: INT, pAddr: PVOID, pStringBuf: PSTR, StringBufSize: size_t) -> PCSTR; pub fn inet_pton(Family: INT, pszAddrString: PCSTR, pAddrBuf: PVOID) -> INT; pub fn ioctlsocket(s: SOCKET, cmd: c_long, argp: *mut u_long) -> c_int; 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; } #[cfg(any(target_arch = "x86", target_arch = "arm"))] extern "system" { pub fn WSCInstallProviderAndChains( lpProviderId: LPGUID, lpszProviderDllPath: LPWSTR, lpszLspName: LPWSTR, dwServiceFlags: DWORD, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpdwCatalogEntryId: LPDWORD, lpErrno: LPINT, ) -> c_int; } #[cfg(target_arch = "x86_64")] extern "system" { pub fn WSCDeinstallProvider32(lpProviderId: LPGUID, lpErrno: LPINT) -> c_int; pub fn WSCEnableNSProvider32(lpProviderId: LPGUID, fEnable: BOOL) -> INT; pub fn WSCEnumNameSpaceProviders32( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOW, ) -> INT; pub fn WSCEnumNameSpaceProvidersEx32( lpdwBufferLength: LPDWORD, lpnspBuffer: LPWSANAMESPACE_INFOEXW, ) -> INT; pub fn WSCEnumProtocols32( lpiProtocols: LPINT, lpProtocolBuffer: LPWSAPROTOCOL_INFOW, lpdwBufferLength: LPDWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCGetProviderInfo32( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: *mut size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCGetProviderPath32( lpProviderId: LPGUID, lpszProviderDllPath: *mut WCHAR, lpProviderDllPathLen: LPINT, lpErrno: LPINT, ) -> c_int; pub fn WSCInstallNameSpace32( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, ) -> INT; pub fn WSCInstallNameSpaceEx32( lpszIdentifier: LPWSTR, lpszPathName: LPWSTR, dwNameSpace: DWORD, dwVersion: DWORD, lpProviderId: LPGUID, lpProviderSpecific: LPBLOB, ) -> INT; pub fn WSCInstallProvider64_32( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCInstallProviderAndChains64_32( lpProviderId: LPGUID, lpszProviderDllPath: LPWSTR, lpszProviderDllPath32: LPWSTR, lpszLspName: LPWSTR, dwServiceFlags: DWORD, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpdwCatalogEntryId: LPDWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCSetProviderInfo32( lpProviderId: LPGUID, InfoType: WSC_PROVIDER_INFO_TYPE, Info: PBYTE, InfoSize: size_t, Flags: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCUnInstallNameSpace32(lpProviderId: LPGUID) -> INT; pub fn WSCUpdateProvider32( lpProviderId: LPGUID, lpszProviderDllPath: *const WCHAR, lpProtocolInfoList: LPWSAPROTOCOL_INFOW, dwNumberOfEntries: DWORD, lpErrno: LPINT, ) -> c_int; pub fn WSCWriteNameSpaceOrder32(lpProviderId: LPGUID, dwNumberOfEntries: DWORD) -> c_int; pub fn WSCWriteProviderOrder32(lpwdCatalogEntryId: LPDWORD, dwNumberOfEntries: DWORD) -> c_int; } extern { // pub static AddressFamilyInformation; // pub static eui48_broadcast; // pub static in4addr_alligmpv3routersonlink; // pub static in4addr_allnodesonlink; // pub static in4addr_allroutersonlink; // pub static in4addr_allteredohostsonlink; // pub static in4addr_any; // pub static in4addr_broadcast; // pub static in4addr_linklocalprefix; // pub static in4addr_loopback; // pub static in4addr_multicastprefix; // pub static in6addr_6to4prefix; // pub static in6addr_allmldv2routersonlink; // pub static in6addr_allnodesonlink; // pub static in6addr_allnodesonnode; // pub static in6addr_allroutersonlink; // pub static in6addr_any; // pub static in6addr_linklocalprefix; // pub static in6addr_loopback; // pub static in6addr_multicastprefix; // pub static in6addr_solicitednodemulticastprefix; // pub static in6addr_teredoinitiallinklocaladdress; // pub static in6addr_teredoprefix; // pub static in6addr_teredoprefix_old; // pub static in6addr_v4mappedprefix; // pub static scopeid_unspecified; // pub static sockaddr_size; }