Does anyone have an example of this ws2_32.dll function? I cant even get it declared properly.
Thanks
Thanks
FUNCTION GetIpAddresses2 (optional byval count as long, byval B as string) EXPORT AS STRING function = "" if B = "" then B = gethostname2 if B = "" then exit function if count < 1 then count = %maxlong local xptr1 as hostent ptr, xptr2 as hostent ptr local L as long local s1 as string, s2 as string, s3 as string local htcp as dword local L135 as long local flag as long local L1 as long local flag4 as long local count2 as long count2 = count xptr1 = gethostbyname(bycopy B) if xptr1 then count = count2 reset L do reset flag4 if @xptr1.@@h_list[L] = 0 then exit do s3 = iptostring(@xptr1.@@h_list[L]) xptr2 = gethostbyaddr(@xptr1.@@h_list[L], 4, %af_inet) if xptr2 then if @xptr2.h_addr = %af_inet then s2 = s2 + s3 + crlf decr count if count = 0 then exit do end if flag4 = -1 end if end if incr L loop end if s2 = trim2(s2, crlf()) if count2 <> %maxlong then s2 = parse2(s2, count2, crlf()) end if function = s2 end function TYPE addrinfo ai_flags as long ai_family as long ai_sockettype as long ai_protocol as long ai_addrlen as long ai_canonname as asciiz ptr ai_addr as sockaddr ptr ai_next as addrinfo ptr END TYPE declare function getaddrinfo2 (asciiz, asciiz, addrinfo, byval paddrinfo as addrinfo ptr) as long declare sub freeaddrinfo2 (byval paddrinfo as addrinfo ptr) FUNCTION GetIpAddresses (optional byval count as long, byval B as string) EXPORT AS STRING function = "" if turnonwsa() then exit function if windowsversion > -5.01## then function = getipaddresses2(count, B) : exit function local L1 as long, s1 as string, A as long, L2 as long, flag as long, s2 as string local xptr as hostent ptr, xptr2 as hostent ptr local hproc as dword, s3 as string local htcp as dword if B = "" then B = gethostname2 if B = "" then exit function if count < 1 then count = %maxlong local count2 as long count2 = count hproc = gpa("ws2_32.dll", "getaddrinfo") if hproc = 0 then exit function local x as addrinfo, x1 as sockaddr, paddrinfo1 as addrinfo ptr, d as dword x.ai_family = %af_inet s1 = string$(100000, 0) paddrinfo1 = strptr(s1) d = varptr(paddrinfo1) call dword hproc using getaddrinfo2 (bycopy B, "", x, byval d) to L1 if L1 = 0 then copymemory varptr(x), byval paddrinfo1, len(x) do if x.ai_addr then if x.@ai_addr.sa_family = %af_inet then s3 = iptostring(cvl(mid$(x.@ai_addr.sa_data, 3))) s2 = s2 + crlf() + s3 decr count if count = 0 then exit do end if end if end if if x.ai_next = 0 then exit do copymemory varptr(x), byval x.ai_next, len(x) loop hproc = gpa("ws2_32.dll", "freeaddrinfo") if hproc = 0 then exit function call dword hproc using freeaddrinfo2 (paddrinfo1) end if s2 = trim2(s2, crlf()) if count2 <> %maxlong then s2 = parse2(s2, count2, crlf()) end if function = s2 END FUNCTION function IpToString (BYVAL A AS long) EXPORT AS STRING function = "" if A = 0 then exit function LOCAL s AS STRING, bptr AS BYTE PTR bptr = VARPTR(A) s = USING$("#_.#_.#_.#", @bptr[0], @bptr[1], @bptr[2], @bptr[3]) FUNCTION = s END FUNCTION
#COMPILE EXE #DIM ALL #INCLUDE "Winsock_X.INC" %dbug = 1 ' 1 to use dbug, 0 to disuse 'define UDTs here, can't do it in a function/sub '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'used for getaddrinfo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TYPE aiHints ai_flags AS INTEGER ai_family AS INTEGER ai_socktype AS INTEGER ai_protocol AS INTEGER END TYPE TYPE addrinfo ai_flags AS LONG ai_family AS LONG ai_sockettype AS LONG ai_protocol AS LONG ai_addrlen AS LONG ai_canonname AS ASCIIZ PTR ai_addr AS sockaddr PTR ai_next AS addrinfo PTR END TYPE 'ai_flags - Flags that indicate options used in the getaddrinfo function. %AI_PASSIVE = &h01 ' The socket address will be used in a call to the bind function. %AI_CANONNAME = &h02 ' The canonical name is returned in the first ai_canonname member. %AI_NUMERICHOST = &h04 ' The nodename parameter passed to the getaddrinfo function must be a numeric string. %AI_ADDRCONFIG = &h0400 ' (Vista or later)The getaddrinfo will resolve only if a global address is configured. The IPv6 and IPv4 loopback address is not considered a valid global address. %AI_NON_AUTHORITATIVE = &h04000 ' (Vista or later)The address information can be from a non-authoritative namespace provider. Windows Vista or later for the NS_EMAIL namespace. %AI_SECURE = &h08000 ' (Vista or later)The address information is from a secure channel. Windows Vista or later for the NS_EMAIL namespace. %AI_RETURN_PREFERRED_NAMES = &h010000 ' (Vista or later)The address information is for a preferred name for a user. Windows Vista or later for the NS_EMAIL namespace. DECLARE FUNCTION getaddrinfo LIB "ws2_32.dll" ALIAS "getaddrinfo"(ASCIIZ, ASCIIZ, addrinfo, BYVAL paddrinfo AS addrinfo PTR) AS LONG DECLARE FUNCTION freeaddrinfo LIB "ws2_32.dll" ALIAS "freeaddrinfo"(BYVAL freeAddrData AS addrinfo PTR) AS LONG '______________________________________________________________________________ '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'PBMain +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ FUNCTION PBMAIN() DIM WinsockData AS WSADATA 'WSADATA is declared in "Winsock_X.inc" DIM wsAddrData AS addrinfo DIM ptrWsAddrData AS DWORD DIM pntr AS addrinfo POINTER DIM result AS LONG ptrWSAddrData = VARPTR(wsAddrData) 'call wsaStartup to initialize winsock IF WSAStartup( MAKDWD(2,2), WinsockData) THEN ' if WSA Startup fails then... IF %dbug THEN MessageBox %HWND_DESKTOP, BYCOPY "WSAStartup FAILED", BYCOPY " WSAStartup", %MB_ICONINFORMATION OR %MB_OK END IF ELSE ' if WSA Startup Successful then... IF %dbug THEN ' Display Winsock Ver and Status MessageBox %HWND_DESKTOP, BYCOPY "WSAStartup Succeeded" + CHR$(13) + CHR$(10) + _ CHR$(13) + CHR$(10) + _ WinsockData.szDescription + CHR$(13) + CHR$(10) +_ ' UDT for WSADATA(WinsockData) defined in Winsock_X.inc WinsockData.szSystemStatus + CHR$(13) + CHR$(10), _ BYCOPY " WSAStartup", %MB_ICONINFORMATION OR %MB_OK END IF END IF 'initializewsAddrData for getaddrinfo wsAddrData.ai_flags = %AI_CANONNAME ' retrieve the canonical name wsAddrData.ai_family = %AF_INET ' IPv4 only. 0=IPv4 AND IPv6 wsAddrData.ai_sockettype = 0 ' accept any socket type wsAddrData.ai_protocol = 0 ' accept any protocol wsAddrData.ai_addrlen = 0 ' initialize w/zero wsAddrData.ai_next = 0 ' initialize w/zero wsAddrData.ai_canonname = 0 ' initialize w/zero IF getaddrinfo("localhost" + $NUL, $NUL, wsAddrData, BYVAL ptrWsAddrData) THEN IF %dbug THEN MessageBox %HWND_DESKTOP, BYCOPY "getaddrinfo FAILED", BYCOPY " WSAStartup", %MB_ICONINFORMATION OR %MB_OK END IF ELSE IF %dbug THEN ' Display getaddrinfo LOCAL msg AS STRING pntr = ptrWsAddrData DO msg = msg + "This TYPE: " + STR$(pntr) + $CRLF + _ "Flags: " + STR$(@pntr.ai_flags) + $CRLF + _ 'seems an odd number to return "Family: " + STR$(@pntr.ai_family) + $CRLF + _ "Socket Type: " + STR$(@pntr.ai_sockettype) + $CRLF + _ "Protocol: " + STR$(@pntr.ai_protocol) + $CRLF + _ "Addr Len: " + STR$(@pntr.ai_addrlen) + $CRLF + _ "Canonical Name: " + STR$(@pntr.ai_canonname) + $CRLF + _ 'should return canonical name? "Addr Ptr: " + STR$(@pntr.ai_addr) + $CRLF + _ "Next TYPE: " + STR$(@pntr.ai_next) + $CRLF + $CRLF pntr = @pntr.ai_next LOOP UNTIL pntr = 0 MessageBox %HWND_DESKTOP, BYCOPY msg, BYCOPY " getaddrinfo", %MB_OK END IF END IF ' free mem used by getaddrinfo freeaddrinfo(ptrWsAddrData) 'call wsaCleanup to shutdown winsock WSACleanup() END FUNCTION '______________________________________________________________________________
'------------------------------------------------------------------------------ ' WSOCK_X.INC -- Windows Sockets 1.1 and 2.2 API Declarations for PowerBASIC ' ' Copyright (C)1997-2002 PowerBASIC, Inc. ' Portions Copyright (C) 1993-1999 Microsoft Corporation ' ' Last Update: January 21, 2002 ' ' This file contains CONSTANT, TYPE, UNION and DECLARE statements for the ' 32-bit Windows Sockets 1.1 (wsock32) and 2.2 (ws2_32) API's. ' If %WSOCK32 = 1 is defined, then wsock32 (winsock1) is used, else ws_2_32 ' (winsock2) is used. Default is ws2_32 (winsock2). ' ' This file is incompatible with VisualBasic. Uses correct datatype as defined ' in Microsoft SDK for Windows for all APIcalls. This includes datatypes which ' aren't natively supported in VB such as unsigned integers and ASCIIZ strings. ' You have a royalty-free right to use, modify, reproduce and distribute this ' file (and/or any modified version) in any way you find useful, provided that ' you agree that PowerBASIC has no warranty, obligation or liability for its ' contents. Refer to Microsofts Windows Programmer Reference for further info. '------------------------------------------------------------------------------ #IF NOT %DEF (%WSOCK32) MACRO WSockLib = "WS2_32.DLL" #ELSE MACRO WSockLib = "WSOCK32.DLL" #ENDIF #IF NOT %DEF(%WSOCK_X_INC) %WSOCK_X_INC = 1 'Prevent recursive include '------------------------------------------------------------------------------ ' Default: include function prototypes, don't include function typedefs '------------------------------------------------------------------------------ #IF NOT %DEF(%INCL_WINSOCK_API_PROTOTYPES) %INCL_WINSOCK_API_PROTOTYPES = 1 #ENDIF '------------------------------------------------------------------------------ ' Include win32api if necessairy '------------------------------------------------------------------------------ #IF NOT %DEF(%WINAPI) #INCLUDE "win32api.inc" #ENDIF '------------------------------------------------------------------------------ ' Set winsock version if not set '------------------------------------------------------------------------------ #IF NOT %DEF(%WINSOCK_VERSION) %WINSOCK_VERSION = &h0202?? #ENDIF '------------------------------------------------------------------------------ ' Select uses arrays of sockets. These macros manipulate such arrays. ' %FD_SETSIZE may be defined by the user before including this file, but the ' default here should be >= 64 '------------------------------------------------------------------------------ #IF NOT %DEF(%FD_SETSIZE) %FD_SETSIZE = 64 #ENDIF TYPE FD_SETstruc DWORD fd_count AS DWORD fd_array (%FD_SETSIZE - 1) AS DWORD END TYPE SUB FD_SET (BYVAL s AS DWORD, fds AS fd_setstruc) DO IF fds.fd_count < %FD_SETSIZE THEN fds.fd_array(fds.fd_count) = s INCR fds.fd_count ELSE EXIT DO END IF LOOP END SUB SUB FD_ZERO (fd AS fd_setstruc) fd.fd_count = 0 END SUB TYPE TimeVal DWORD Tv_Sec AS LONG Tv_uSec AS LONG END TYPE '------------------------------------------------------------------------------ ' Commands for IoCtlSocket() ' IoCtl's have the command encoded in the lower word, and the size of any in or ' out parameters in the upper word. The high 2 bits of the upper word are used ' to encode the in/out status of the parameter;for now we restrict to 128 bytes '------------------------------------------------------------------------------ %IOCPARM_MASK = &H7F 'Parameters must be < 128 bytes %IOC_VOID = &H20000000 'No parameters %IOC_OUT = &H40000000 'Copy out parameters %IOC_IN = &H80000000 'Copy in parameters %IOC_INOUT = (%IOC_IN OR %IOC_OUT) '20000000 distinguishes new & old ioctl's %FIONBIO = &h8004667E %FIONSYNC = &h8004667D %FIONREAD = &h4004667F '------------------------------------------------------------------------------ ' Socket i/o control '------------------------------------------------------------------------------ %SIOCSHIWAT = &h80047300 'set high watermark %SIOCGHIWAT = &h40047301 'get high watermark %SIOCSLOWAT = &h80047302 'set low watermark %SIOCGLOWAT = &h40047303 'get low watermark %SIOCATMARK = &h40047307 'at oob mark? '------------------------------------------------------------------------------ ' Structures returned by network data base library. All addresses are supplied ' in host order,and returned in network order.(suitable for use in systemcalls) '------------------------------------------------------------------------------ TYPE Hostent h_name AS ASCIIZ PTR 'official name of host h_alias AS DWORD PTR 'alias list h_addr AS INTEGER 'host address type h_len AS INTEGER 'length of address h_list AS DWORD PTR 'list of addresses END TYPE TYPE netent DWORD n_name AS ASCIIZ PTR 'official name of net n_aliases AS DWORD PTR 'alias list n_addrtype AS INTEGER 'net address type n_net AS DWORD 'network # END TYPE TYPE servent DWORD s_name AS ASCIIZ PTR 'official service name s_aliases AS DWORD PTR 'alias list s_port AS INTEGER 'port # s_proto AS ASCIIZ PTR 'protocol to use END TYPE TYPE protoent DWORD p_name AS ASCIIZ PTR 'official protocol name p_aliases AS DWORD PTR 'alias list p_proto AS INTEGER 'protocol # END TYPE '------------------------------------------------------------------------------ ' Constants and structures defined by the internet system,per RFC 790,Sept.1981 ' Protocols '------------------------------------------------------------------------------ %IPPROTO_IP = 0 'Dummy for IP %IPPROTO_ICMP = 1 'Control message protocol %IPPROTO_IGMP = 2 'Group management protocol %IPPROTO_GGP = 3 'Gateway^2 (deprecated) %IPPROTO_TCP = 6 'Tcp %IPPROTO_PUP = 12 'Pup %IPPROTO_UDP = 17 'User datagram protocol %IPPROTO_IDP = 22 'Xns idp %IPPROTO_ND = 77 'UNOFFICIAL net disk proto %IPPROTO_RAW = 255 'Raw IP packet %IPPROTO_MAX = 256 '------------------------------------------------------------------------------ ' Port/socket numbers - standard network functions '------------------------------------------------------------------------------ %IPPORT_ECHO = 7 %IPPORT_DISCARD = 9 %IPPORT_SYSTAT = 11 %IPPORT_DAYTIME = 13 %IPPORT_NETSTAT = 15 %IPPORT_FTP = 21 %IPPORT_TELNET = 23 %IPPORT_SMTP = 25 %IPPORT_TIMESERVER = 37 %IPPORT_NAMESERVER = 42 %IPPORT_WHOIS = 43 %IPPORT_MTP = 57 '------------------------------------------------------------------------------ ' Port/socket numbers - host specific functions '------------------------------------------------------------------------------ %IPPORT_TFTP = 69 %IPPORT_RJE = 77 %IPPORT_FINGER = 79 %IPPORT_TTYLINK = 87 %IPPORT_SUPDUP = 95 '------------------------------------------------------------------------------ ' Unix TCP sockets '------------------------------------------------------------------------------ %IPPORT_EXECSERVER = 512 %IPPORT_LOGINSERVER = 513 %IPPORT_CMDSERVER = 514 %IPPORT_EFSSERVER = 520 '------------------------------------------------------------------------------ ' Unix UDP sockets '------------------------------------------------------------------------------ %IPPORT_BIFFUDP = 512 %IPPORT_WHOSERVER = 513 %IPPORT_ROUTESERVER = 520 ' 520+1 is also used '------------------------------------------------------------------------------ ' Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root). '------------------------------------------------------------------------------ %IPPORT_RESERVED = 1024 '------------------------------------------------------------------------------ ' Link numbers '------------------------------------------------------------------------------ %IMPLINK_IP = 155 %IMPLINK_LOWEXPER = 156 %IMPLINK_HIGHEXPER = 158 '------------------------------------------------------------------------------ ' Internet address '------------------------------------------------------------------------------ TYPE s_un_b_struc s_b1 AS BYTE s_b2 AS BYTE s_b3 AS BYTE s_b4 AS BYTE END TYPE TYPE s_un_w_struc s_w1 AS WORD s_w2 AS WORD END TYPE UNION s_un s_un_b AS s_un_b_struc s_un_w AS s_un_w_struc END UNION UNION in_addr s_un_b AS s_un_b_struc s_un_w AS s_un_w_struc s_addr AS DWORD END UNION '------------------------------------------------------------------------------ ' Definition of bits in Internet address integers. '------------------------------------------------------------------------------ FUNCTION IN_CLASSA(BYVAL i AS DWORD) AS LONG FUNCTION = ((i AND &h080000000) = 0) END FUNCTION %IN_CLASSA_NET = &h0FF000000 %IN_CLASSA_NSHIFT = 24 %IN_CLASSA_HOST = &h000FFFFFF %IN_CLASSA_MAX = 128 FUNCTION IN_CLASSB(BYVAL i AS DWORD) AS LONG FUNCTION = ((i AND &h0C0000000) = &h080000000) END FUNCTION %IN_CLASSB_NET = &h0FFFF0000 %IN_CLASSB_NSHIFT = 16 %IN_CLASSB_HOST = &h00000FFFF %IN_CLASSB_MAX = 65536 FUNCTION IN_CLASSC(BYVAL i AS DWORD) AS LONG FUNCTION = ((i AND &h0E0000000) = &h0C0000000) END FUNCTION %IN_CLASSC_NET = &h0FFFFFF00 %IN_CLASSC_NSHIFT = 8 %IN_CLASSC_HOST = &h0000000FF #IF NOT %DEF(%WSOCK32) FUNCTION IN_CLASSD(BYVAL i AS DWORD) AS LONG FUNCTION = ((i AND &h0F0000000) = &h0E0000000) END FUNCTION %IN_CLASSD_NET = &h0F0000000 %IN_CLASSD_NSHIFT = 28 %IN_CLASSD_HOST = &h00FFFFFFF #ENDIF %INADDR_ANY = &h000000000 %INADDR_LOOPBACK = &h07F000001 %INADDR_BROADCAST = &h0FFFFFFFF %INADDR_NONE = &h0FFFFFFFF %ADDR_ANY = %INADDR_ANY '------------------------------------------------------------------------------ ' Socket address, internet style '------------------------------------------------------------------------------ TYPE sockaddr_in sin_family AS INTEGER sin_port AS WORD sin_addr AS in_addr sin_zero AS STRING * 8 END TYPE %WSADESCRIPTION_LEN = 256 %WSASYS_STATUS_LEN = 128 TYPE WSAdata wVersion AS WORD wHighVersion AS WORD szDescription AS ASCIIZ * %WSADESCRIPTION_LEN + 1 szSystemStatus AS ASCIIZ * %WSASYS_STATUS_LEN + 1 iMaxSockets AS WORD iMaxUdpDg AS WORD lpVendorInfo AS ASCIIZ PTR END TYPE '------------------------------------------------------------------------------ ' Definitions related to sockets. '------------------------------------------------------------------------------ %INVALID_SOCKET = NOT 0 %SOCKET_ERROR = -1 %FROM_PROTOCOL_INFO = -1 '------------------------------------------------------------------------------ ' Socket types '------------------------------------------------------------------------------ %SOCK_STREAM = 1 'Stream socket %SOCK_DGRAM = 2 'Datagram socket %SOCK_RAW = 3 'Raw-protocol interface %SOCK_RDM = 4 'Reliably-delivered message %SOCK_SEQPACKET = 5 'Sequenced packet stream '------------------------------------------------------------------------------ ' Option flags per socket '------------------------------------------------------------------------------ %SO_DEBUG = &H00001 'Turn on debugging info recording %SO_ACCEPTCONN = &H00002 'Socket has had listen() %SO_REUSEADDR = &H00004 'Allow local address reuse %SO_KEEPALIVE = &H00008 'Keep connections alive %SO_DONTROUTE = &H00010 'Just use interface addresses %SO_BROADCAST = &H00020 'Permit sending of broadcast msgs %SO_USELOOPBACK = &H00040 'Bypass hardware when possible %SO_LINGER = &H00080 'Linger on close if data present %SO_OOBINLINE = &H00100 'Leave received OOB data in line %SO_DONTLINGER = NOT %SO_LINGER %SO_EXCLUSIVEADDRUSE= NOT %SO_REUSEADDR '------------------------------------------------------------------------------ ' Additional options '------------------------------------------------------------------------------ %SO_SNDBUF = &H01001 'Send buffer size %SO_RCVBUF = &H01002 'Receive buffer size %SO_SNDLOWAT = &H01003 'Send low-water mark %SO_RCVLOWAT = &H01004 'Receive low-water mark %SO_SNDTIMEO = &H01005 'Send timeout %SO_RCVTIMEO = &H01006 'Receive timeout %SO_ERROR = &H01007 'Get error status and clear %SO_TYPE = &H01008 'Get socket type '------------------------------------------------------------------------------ ' Options for connect/disconnect data and options. Used only by non-TCP/IP ' transports such as DECNet, OSI TP4, etc. '------------------------------------------------------------------------------ %SO_CONNDATA = &h07000 %SO_CONNOPT = &h07001 %SO_DISCDATA = &h07002 %SO_DISCOPT = &h07003 %SO_CONNDATALEN = &h07004 %SO_CONNOPTLEN = &h07005 %SO_DISCDATALEN = &h07006 %SO_DISCOPTLEN = &h07007 '------------------------------------------------------------------------------ ' Option for opening sockets for synchronous access. '------------------------------------------------------------------------------ %SO_OPENTYPE = &h07008 %SO_SYNCHRONOUS_ALERT = &h010 %SO_SYNCHRONOUS_NONALERT = &h020 '------------------------------------------------------------------------------ ' Other NT-specific options. '------------------------------------------------------------------------------ %SO_MAXDG = &h07009 %SO_MAXPATHDG = &h0700A %SO_UPDATE_ACCEPT_CONTEXT = &h0700B %SO_CONNECT_TIME = &h0700C '------------------------------------------------------------------------------ ' Additional winsock2 options '------------------------------------------------------------------------------ %SO_GROUP_ID = &H2001 'ID of a socket group %SO_GROUP_PRIORITY = &H2002 'the relative priority within a group %SO_MAX_MSG_SIZE = &H2003 'maximum message size %SO_PROTOCOL_INFO = &H2004 'WSAPROTOCOL_INFO structure %SO_PROTOCOL_INFOA = &H2004 'WSAPROTOCOL_INFO structure %SO_PROTOCOL_INFOW = &H2005 'WSAPROTOCOL_INFO structure %PVD_CONFIG = &H3001 'configuration info for serviceprovider %SO_CONDITIONAL_ACCEPT = &H3002 'enable true conditional accept: 'connection is not ack-ed to the 'other side until conditional 'function returns %CF_ACCEPT '------------------------------------------------------------------------------ ' Option for opening sockets for synchronous access. '------------------------------------------------------------------------------ %SO_OPENTYPE = &h07008 %SO_SYNCHRONOUS_ALERT = &h010 %SO_SYNCHRONOUS_NONALERT = &h020 '------------------------------------------------------------------------------ ' Other NT-specific options. '------------------------------------------------------------------------------ %SO_MAXDG = &h07009 %SO_MAXPATHDG = &h0700A %SO_UPDATE_ACCEPT_CONTEXT = &h0700B %SO_CONNECT_TIME = &h0700C '------------------------------------------------------------------------------ ' TCP Options '------------------------------------------------------------------------------ %TCP_NODELAY = &H00001 %TCP_BSDURGENT = &H07000 '------------------------------------------------------------------------------ 'Address families. '------------------------------------------------------------------------------ %AF_UNSPEC = 0 'Unspecified %AF_UNIX = 1 'Local to host (pipes, portals) %AF_INET = 2 'Internetwork: UDP, TCP, etc. %AF_IMPLINK = 3 'Arpanet imp addresses %AF_PUP = 4 'Pup protocols: e.g. BSP %AF_CHAOS = 5 'Mit CHAOS protocols %AF_NS = 6 'XEROX NS protocols %AF_IPX = %AF_NS 'IPX and SPX %AF_ISO = 7 'ISO protocols %AF_OSI = %AF_ISO 'OSI is ISO %AF_ECMA = 8 'European computer manufacturers %AF_DATAKIT = 9 'Datakit protocols %AF_CCITT = 10 'CCITT protocols, X.25 etc %AF_SNA = 11 'IBM SNA %AF_DECnet = 12 'DECnet %AF_DLI = 13 'Direct data link interface %AF_LAT = 14 'LAT %AF_HYLINK = 15 'NSC Hyperchannel %AF_APPLETALK = 16 'AppleTalk %AF_NETBIOS = 17 'NetBios-style addresses %AF_VOICEVIEW = 18 'VoiceView %AF_FIREFOX = 19 'FireFox %AF_UNKNOWN = 20 'Somebody is using this! %AF_BAN = 21 'Banyan #IF NOT %DEF(%WSOCK32) %AF_ATM = 22 'Native ATM services %AF_INET6 = 23 'InterNetwork Version 6 %AF_CLUSTER = 24 'MicroSoft WolfPack %AF_12844 = 25 'IEEE 1284.4 WG AF %AF_IRDA = 26 'IrDA %AF_NETDES = 28 'Network designers OSI and Gateway %AF_MAX = 29 ' #ELSE %AF_MAX = 22 ' #ENDIF '------------------------------------------------------------------------------ ' Structure used by kernel to store most addresses '------------------------------------------------------------------------------ TYPE sockaddr sa_family AS WORD sa_data AS STRING * 14 END TYPE '------------------------------------------------------------------------------ ' Structure used by kernel to pass protocol information in raw sockets '------------------------------------------------------------------------------ TYPE sockproto sp_family AS WORD sp_protocol AS WORD END TYPE '------------------------------------------------------------------------------ 'Protocol families, same as address families for now. '------------------------------------------------------------------------------ %PF_UNSPEC = %AF_UNSPEC %PF_UNIX = %AF_UNIX %PF_INET = %AF_INET %PF_IMPLINK = %AF_IMPLINK %PF_PUP = %AF_PUP %PF_CHAOS = %AF_CHAOS %PF_NS = %AF_NS %PF_IPX = %AF_IPX %PF_ISO = %AF_ISO %PF_OSI = %AF_OSI %PF_ECMA = %AF_ECMA %PF_DATAKIT = %AF_DATAKIT %PF_CCITT = %AF_CCITT %PF_SNA = %AF_SNA %PF_DECnet = %AF_DECnet %PF_DLI = %AF_DLI %PF_LAT = %AF_LAT %PF_HYLINK = %AF_HYLINK %PF_APPLETALK = %AF_APPLETALK %PF_VOICEVIEW = %AF_VOICEVIEW %PF_FIREFOX = %AF_FIREFOX %PF_UNKNOWN = %AF_UNKNOWN %PF_BAN = %AF_BAN #IF NOT %DEF(%WSOCK32) %PF_ATM = %AF_ATM %PF_INET6 = %AF_INET6 #ENDIF %PF_MAX = %AF_MAX '------------------------------------------------------------------------------ ' Structure used for manipulation linger option '------------------------------------------------------------------------------ TYPE linger DWORD l_onoff AS WORD 'Option on/off l_linger AS WORD 'Linger time END TYPE '------------------------------------------------------------------------------ ' Level number for get/setsockopt() to apply to socket itself '------------------------------------------------------------------------------ %SOL_SOCKET = &H0000FFFF 'options for socket level '------------------------------------------------------------------------------ 'Options for use with [gs]etsockopt at the IP level. '------------------------------------------------------------------------------ %IP_OPTIONS = 1 'Set/get IP per-packet options %IP_MULTICAST_IF = 2 'Set/get IP multicast interface %IP_MULTICAST_TTL = 3 'Set/get IP multicast timetolive %IP_MULTICAST_LOOP = 4 'Set/get IP multicast loopback %IP_ADD_MEMBERSHIP = 5 'Add an IP group membership %IP_DROP_MEMBERSHIP = 6 'Drop an IP group membership %IP_TTL = 7 'Set/get IP Time To Live %IP_TOS = 8 'Set/get IP Type Of Service %IP_DONTFRAGMENT = 9 'Set/get IP Don't Fragment flag %IP_DEFAULT_MULTICAST_TTL = 1 'Normally limit m'casts to 1 hop %IP_DEFAULT_MULTICAST_LOOP = 1 'Normally hear sends if a member %IP_MAX_MEMBERSHIPS = 20 'Per socket; must fit in one mbuf TYPE Ip_MREQ Imr_MultiAddress AS In_Addr Imr_Interface AS In_Addr END TYPE '------------------------------------------------------------------------------ ' Maximum queue length specifiable by listen '------------------------------------------------------------------------------ #IF NOT %DEF(%WSOCK32) %SOMAXCONN = &h7FFFFFFF ' #ELSE %SOMAXCONN = 5 ' #ENDIF %MSG_OOB = &H01 'Process out-of-band data %MSG_PEEK = &H02 'Peek at incoming message %MSG_DONTROUTE = &H04 'Send without using routing tables %MSG_PARTIAL = &H08000 'Partial send or recv msg export %MSG_MAXIOVLEN = 16 %MSG_INTERRUPT = &h10 'Send/recv in interrupt context '------------------------------------------------------------------------------ 'Define constant based on rfc883, used by gethostbyxxxx() calls. '------------------------------------------------------------------------------ %MAXGETHOSTSTRUCT = 1024 '------------------------------------------------------------------------------ ' WinSock 2 extension -- bit values and indices for FD_XXX network events '------------------------------------------------------------------------------ %FD_READ_BIT = 0 %FD_READ = 1 %FD_WRITE_BIT = 1 %FD_WRITE = 2 %FD_OOB_BIT = 2 %FD_OOB = 4 %FD_ACCEPT_BIT = 3 %FD_ACCEPT = 8 %FD_CONNECT_BIT = 4 %FD_CONNECT = 16 %FD_CLOSE_BIT = 5 %FD_CLOSE = 32 #IF NOT %DEF(%WSOCK32) %FD_QOS_BIT = 6 %FD_QOS = 64 %FD_GROUP_QOS_BIT = 7 %FD_GROUP_QOS = 128 %FD_ROUTING_INTERFACE_CHANGE_BIT = 8 %FD_ROUTING_INTERFACE_CHANGE = 256 %FD_ADDRESS_LIST_CHANGE_BIT = 9 %FD_ADDRESS_LIST_CHANGE = 512 #ENDIF %FD_MAX_EVENTS = 10 %FD_ALL_EVENTS = 1024 - 1 '------------------------------------------------------------------------------ ' All Windows Socketerror constants are biased by WSABASEERR from the "normal" '------------------------------------------------------------------------------ %WSABASEERR = 10000 '------------------------------------------------------------------------------ ' Windows Sockets definitions of regular Microsoft C error constants '------------------------------------------------------------------------------ %WSAEINTR = %WSABASEERR + 4 %WSAEBADF = %WSABASEERR + 9 %WSAEACCES = %WSABASEERR + 13 %WSAEFAULT = %WSABASEERR + 14 %WSAEINVAL = %WSABASEERR + 22 %WSAEMFILE = %WSABASEERR + 24 '------------------------------------------------------------------------------ 'Windows Sockets definitions of regular Berkeley error constants '------------------------------------------------------------------------------ %WSAEWOULDBLOCK = %WSABASEERR + 35 %WSAEINPROGRESS = %WSABASEERR + 36 %WSAEALREADY = %WSABASEERR + 37 %WSAENOTSOCK = %WSABASEERR + 38 %WSAEDESTADDRREQ = %WSABASEERR + 39 %WSAEMSGSIZE = %WSABASEERR + 40 %WSAEPROTOTYPE = %WSABASEERR + 41 %WSAENOPROTOOPT = %WSABASEERR + 42 %WSAEPROTONOSUPPORT = %WSABASEERR + 43 %WSAESOCKTNOSUPPORT = %WSABASEERR + 44 %WSAEOPNOTSUPP = %WSABASEERR + 45 %WSAEPFNOSUPPORT = %WSABASEERR + 46 %WSAEAFNOSUPPORT = %WSABASEERR + 47 %WSAEADDRINUSE = %WSABASEERR + 48 %WSAEADDRNOTAVAIL = %WSABASEERR + 49 %WSAENETDOWN = %WSABASEERR + 50 %WSAENETUNREACH = %WSABASEERR + 51 %WSAENETRESET = %WSABASEERR + 52 %WSAECONNABORTED = %WSABASEERR + 53 %WSAECONNRESET = %WSABASEERR + 54 %WSAENOBUFS = %WSABASEERR + 55 %WSAEISCONN = %WSABASEERR + 56 %WSAENOTCONN = %WSABASEERR + 57 %WSAESHUTDOWN = %WSABASEERR + 58 %WSAETOOMANYREFS = %WSABASEERR + 59 %WSAETIMEDOUT = %WSABASEERR + 60 %WSAECONNREFUSED = %WSABASEERR + 61 %WSAELOOP = %WSABASEERR + 62 %WSAENAMETOOLONG = %WSABASEERR + 63 %WSAEHOSTDOWN = %WSABASEERR + 64 %WSAEHOSTUNREACH = %WSABASEERR + 65 %WSAENOTEMPTY = %WSABASEERR + 66 %WSAEPROCLIM = %WSABASEERR + 67 %WSAEUSERS = %WSABASEERR + 68 %WSAEDQUOT = %WSABASEERR + 69 %WSAESTALE = %WSABASEERR + 70 %WSAEREMOTE = %WSABASEERR + 71 '------------------------------------------------------------------------------ 'Extended Windows Sockets error constant definitions '------------------------------------------------------------------------------ %WSASYSNOTREADY = %WSABASEERR + 91 %WSAVERNOTSUPPORTED = %WSABASEERR + 92 %WSANOTINITIALISED = %WSABASEERR + 93 %WSAEDISCON = %WSABASEERR + 101 #IF NOT %DEF(%WSOCK32) %WSAENOMORE = %WSABASEERR + 102 %WSAECANCELLED = %WSABASEERR + 103 %WSAEINVALIDPROCTABLE = %WSABASEERR + 104 %WSAEINVALIDPROVIDER = %WSABASEERR + 105 %WSAEPROVIDERFAILEDINIT = %WSABASEERR + 106 %WSASYSCALLFAILURE = %WSABASEERR + 107 %WSASERVICE_NOT_FOUND = %WSABASEERR + 108 %WSATYPE_NOT_FOUND = %WSABASEERR + 109 %WSA_E_NO_MORE = %WSABASEERR + 110 %WSA_E_CANCELLED = %WSABASEERR + 111 %WSAEREFUSED = %WSABASEERR + 112 #ENDIF '------------------------------------------------------------------------------ 'Error return codes from gethostbyname() and gethostbyaddr() (when using the 'resolver). Note that these errors are retrieved via WSAGetLastError() and must 'therefore follow the rules for avoiding clashes with error numbers from 'specific implementations or language run-time systems. For this reason the 'codes are based at WSABASEERR + 1001. 'Note also that [WSA]NO_ADDRESS is defined only for compatibility purposes. '------------------------------------------------------------------------------ %WSAHOST_NOT_FOUND = %WSABASEERR + 1001 %HOST_NOT_FOUND = %WSAHOST_NOT_FOUND %WSATRY_AGAIN = %WSABASEERR + 1002 %TRY_AGAIN = %WSATRY_AGAIN %WSANO_RECOVERY = %WSABASEERR + 1003 %NO_RECOVERY = %WSANO_RECOVERY %WSANO_DATA = %WSABASEERR + 1004 %NO_DATA = %WSANO_DATA %WSANO_ADDRESS = %WSANO_DATA %NO_ADDRESS = %WSANO_ADDRESS '------------------------------------------------------------------------------ ' Define QOS related error return codes '------------------------------------------------------------------------------ #IF NOT %DEF(%WSOCK32) %WSA_QOS_RECEIVERS = %WSABASEERR + 1005 'At least 1 Reserve arrived %WSA_QOS_SENDERS = %WSABASEERR + 1006 'At least 1 Path arrived %WSA_QOS_NO_SENDERS = %WSABASEERR + 1007 'There are no senders %WSA_QOS_NO_RECEIVERS = %WSABASEERR + 1008 'There are no receivers %WSA_QOS_REQUEST_CONFIRMED = %WSABASEERR + 1009 'Reserve has been confirmed %WSA_QOS_ADMISSION_FAILURE = %WSABASEERR + 1010 'Error: lack of resources %WSA_QOS_POLICY_FAILURE = %WSABASEERR + 1011 'Reject for bad credentials %WSA_QOS_BAD_STYLE = %WSABASEERR + 1012 'Unknown/conflicting style %WSA_QOS_BAD_OBJECT = %WSABASEERR + 1013 'Problem with filter/buffer %WSA_QOS_TRAFFIC_CTRL_ERROR = %WSABASEERR + 1014 'Problem with part flowspec %WSA_QOS_GENERIC_ERROR = %WSABASEERR + 1015 'General error %WSA_QOS_ESERVICETYPE = %WSABASEERR + 1016 'Invalid servicetype %WSA_QOS_EFLOWSPEC = %WSABASEERR + 1017 'Invalid flowspec %WSA_QOS_EPROVSPECBUF = %WSABASEERR + 1018 'Invalid provider buffer %WSA_QOS_EFILTERSTYLE = %WSABASEERR + 1019 'Invalid filter style %WSA_QOS_EFILTERTYPE = %WSABASEERR + 1020 'Invalid filter type %WSA_QOS_EFILTERCOUNT = %WSABASEERR + 1021 'Incorrect number of filters %WSA_QOS_EOBJLENGTH = %WSABASEERR + 1022 'Invalid object length %WSA_QOS_EFLOWCOUNT = %WSABASEERR + 1023 'Incorrect number of flows %WSA_QOS_EUNKOWNPSOBJ = %WSABASEERR + 1024 'Unkn.obj.in providerbuffer %WSA_QOS_EPOLICYOBJ = %WSABASEERR + 1025 'Inval.policyobject in providerbuffer %WSA_QOS_EFLOWDESC = %WSABASEERR + 1026 'Invalid flowdescriptor in list %WSA_QOS_EPSFLOWSPEC = %WSABASEERR + 1027 'Inconsistent flowspec in providerbuffer %WSA_QOS_EPSFILTERSPEC = %WSABASEERR + 1028 'Invalid filter spec in providerbuffer %WSA_QOS_ESDMODEOBJ = %WSABASEERR + 1029 'Invalid shape discard mode object in providerbuffer %WSA_QOS_ESHAPERATEOBJ = %WSABASEERR + 1030 'Invalid shaping rate object in providerbuffer %WSA_QOS_RESERVED_PETYPE = %WSABASEERR + 1031 'Reserved policy element in providerbuffer '------------------------------------------------------------------------------ ' Compatibility constants '------------------------------------------------------------------------------ %HOST_NOT_FOUND = %WSAHOST_NOT_FOUND %TRY_AGAIN = %WSATRY_AGAIN %NO_RECOVERY = %WSANO_RECOVERY %NO_DATA = %WSANO_DATA ' no address, look for MX record %WSANO_ADDRESS = %WSANO_DATA %NO_ADDRESS = %WSANO_ADDRESS #ENDIF '------------------------------------------------------------------------------ 'Windows Sockets errors redefined as regular Berkeley error constants '------------------------------------------------------------------------------ %EWOULDBLOCK = %WSAEWOULDBLOCK %EINPROGRESS = %WSAEINPROGRESS %EALREADY = %WSAEALREADY %ENOTSOCK = %WSAENOTSOCK %EDESTADDRREQ = %WSAEDESTADDRREQ %EMSGSIZE = %WSAEMSGSIZE %EPROTOTYPE = %WSAEPROTOTYPE %ENOPROTOOPT = %WSAENOPROTOOPT %EPROTONOSUPPORT = %WSAEPROTONOSUPPORT %ESOCKTNOSUPPORT = %WSAESOCKTNOSUPPORT %EOPNOTSUPP = %WSAEOPNOTSUPP %EPFNOSUPPORT = %WSAEPFNOSUPPORT %EAFNOSUPPORT = %WSAEAFNOSUPPORT %EADDRINUSE = %WSAEADDRINUSE %EADDRNOTAVAIL = %WSAEADDRNOTAVAIL %ENETDOWN = %WSAENETDOWN %ENETUNREACH = %WSAENETUNREACH %ENETRESET = %WSAENETRESET %ECONNABORTED = %WSAECONNABORTED %ECONNRESET = %WSAECONNRESET %ENOBUFS = %WSAENOBUFS %EISCONN = %WSAEISCONN %ENOTCONN = %WSAENOTCONN %ESHUTDOWN = %WSAESHUTDOWN %ETOOMANYREFS = %WSAETOOMANYREFS %ETIMEDOUT = %WSAETIMEDOUT %ECONNREFUSED = %WSAECONNREFUSED %ELOOP = %WSAELOOP %ENAMETOOLONG = %WSAENAMETOOLONG %EHOSTDOWN = %WSAEHOSTDOWN %EHOSTUNREACH = %WSAEHOSTUNREACH %ENOTEMPTY = %WSAENOTEMPTY %EPROCLIM = %WSAEPROCLIM %EUSERS = %WSAEUSERS %EDQUOT = %WSAEDQUOT %ESTALE = %WSAESTALE %EREMOTE = %WSAEREMOTE '------------------------------------------------------------------------------ ' Winsock2 error and type extensions '------------------------------------------------------------------------------ #IF NOT %DEF(%WSOCK32) %WSA_IO_PENDING = %ERROR_IO_PENDING %WSA_IO_INCOMPLETE = %ERROR_IO_INCOMPLETE %WSA_INVALID_HANDLE = %ERROR_INVALID_HANDLE %WSA_INVALID_PARAMETER = %ERROR_INVALID_PARAMETER %WSA_NOT_ENOUGH_MEMORY = %ERROR_NOT_ENOUGH_MEMORY %WSA_OPERATION_ABORTED = %ERROR_OPERATION_ABORTED %WSA_INVALID_EVENT = 0??? %WSA_MAXIMUM_WAIT_EVENTS= %MAXIMUM_WAIT_OBJECTS %WSA_WAIT_FAILED = %WAIT_FAILED %WSA_WAIT_EVENT_0 = %WAIT_OBJECT_0 %WSA_WAIT_IO_COMPLETION = %WAIT_IO_COMPLETION %WSA_WAIT_TIMEOUT = %WAIT_TIMEOUT %WSA_INFINITE = %INFINITE TYPE WSABUF dLen AS DWORD ' the length of the buffer buf AS ASCIIZ PTR ' the pointer to the buffer END TYPE #IF NOT %DEF(%QOS_INC) '------------------------------------------------------- %QOS_INC = 1 ' Definitions for valued-based Service Type for each direction of data flow. %SERVICETYPE_NOTRAFFIC = &H00000000 ' No data in this direction %SERVICETYPE_BESTEFFORT = &H00000001 ' Best Effort %SERVICETYPE_CONTROLLEDLOAD = &H00000002 ' Controlled Load %SERVICETYPE_GUARANTEED = &H00000003 ' Guaranteed %SERVICETYPE_NETWORK_UNAVAILABLE = &H00000004 ' Used to notify change to user %SERVICETYPE_GENERAL_INFORMATION = &H00000005 ' corresponds to "General Parameters" defined by IntServ %SERVICETYPE_NOCHANGE = &H00000006 ' used to indicate that the flow spec contains no change from any previous one %SERVICETYPE_NONCONFORMING = &H00000009 ' Non-Conforming Traffic %SERVICETYPE_NETWORK_CONTROL = &H0000000A ' Network Control traffic %SERVICETYPE_QUALITATIVE = &H0000000D ' Qualitative applications ' Definitions for bitmap-based Service Type for each direction of data flow. %SERVICE_BESTEFFORT = &H80010000 %SERVICE_CONTROLLEDLOAD = &H80020000 %SERVICE_GUARANTEED = &H80040000 %SERVICE_QUALITATIVE = &H80200000 ' Flags to control the usage of RSVP on this flow. ' to turn off traffic control, 'OR' this flag with the ' ServiceType field in the FLOWSPEC %SERVICE_NO_TRAFFIC_CONTROL = &H81000000 ' this flag can be used to prevent any rsvp signaling messages from being ' sent. Local traffic control will be invoked, but no RSVP Path messages ' will be sent.This flag can also be used in conjunction with a receiving ' flowspec to suppress the automatic generation of a Reserve message. ' The application would receive notification that a Path message had arrived ' and would then need to alter the QOS by issuing WSAIoctl(%SIO_SET_QOS), ' to unset this flag and thereby causing Reserve messages to go out. %SERVICE_NO_QOS_SIGNALING = &H40000000 ' Flow Specifications for each direction of data flow. TYPE FLOWSPEC DWORD TokenRate AS DWORD ' In Bytes/sec TokenBucketSize AS DWORD ' In Bytes PeakBandwidth AS DWORD ' In Bytes/sec Latency AS DWORD ' In microseconds DelayVariation AS DWORD ' In microseconds ServiceType AS DWORD MaxSduSize AS DWORD ' In Bytes MinimumPolicedSize AS DWORD ' In Bytes END TYPE ' this value can be used in the FLOWSPEC structure to instruct the Rsvp Service ' provider to derive the appropriate default value for the parameter. Note ' that not all values in the FLOWSPEC structure can be defaults. In the ' ReceivingFlowspec, all parameters can be defaulted except the ServiceType. ' In the SendingFlowspec, the MaxSduSize and MinimumPolicedSize can be ' defaulted. Other defaults may be possible. Refer to the appropriate ' documentation. %QOS_NOT_SPECIFIED = &HFFFFFFFF ' define a value that can be used for the PeakBandwidth, which will map into ' positive infinity when the FLOWSPEC is converted into IntServ floating point ' format. We can't use (-1) because that value was previously defined to mean ' "select the default". %POSITIVE_INFINITY_RATE = &HFFFFFFFE ' the provider specific structure can have a number of objects in it. ' Each next structure in the ' ProviderSpecific will be the QOS_OBJECT_HDR struct that prefaces the actual ' data with a type and length for that object. This QOS_OBJECT struct can ' repeat several times if there are several objects. This list of objects ' terminates either when the buffer length has been reached ( WSABUF ) or ' an object of type QOS_END_OF_LIST is encountered. TYPE QOS_OBJECT_HDR DWORD ObjectType AS DWORD ObjectLength AS DWORD ' the length of object buffer INCLUDING this header END TYPE ' general QOS objects start at this offset from the base and have a range ' of 1000 %QOS_GENERAL_ID_BASE = 2000 %QOS_OBJECT_END_OF_LIST = &H00000001 + %QOS_GENERAL_ID_BASE ' QOS_End_of_list structure passed %QOS_OBJECT_SD_MODE = &H00000002 + %QOS_GENERAL_ID_BASE ' QOS_ShapeDiscard structure passed %QOS_OBJECT_SHAPING_RATE = &H00000003 + %QOS_GENERAL_ID_BASE ' QOS_ShapingRate structure %QOS_OBJECT_DESTADDR = &H00000004 + %QOS_GENERAL_ID_BASE ' QOS_DestAddr structure (defined in qossp.h) ' This structure is used to define the behaviour that the traffic ' control packet shaper will apply to the flow. ' ' %TC_NONCONF_BORROW - the flow will receive resources remaining ' after all higher priority flows have been serviced. If a ' TokenRate is specified, packets may be non-conforming and ' will be demoted to less than best-effort priority. ' ' %TC_NONCONF_SHAPE - TokenRate must be specified. Non-conforming ' packets will be retianed in the packet shaper until they become ' conforming. ' ' %TC_NONCONF_DISCARD - TokenRate must be specified. Non-conforming ' packets will be discarded. TYPE QOS_SD_MODE DWORD ObjectHdr AS QOS_OBJECT_HDR ShapeDiscardMode AS DWORD END TYPE %TC_NONCONF_BORROW = 0 %TC_NONCONF_SHAPE = 1 %TC_NONCONF_DISCARD = 2 %TC_NONCONF_BORROW_PLUS = 3 ' This structure allows an app to specify a prorated "average token rate" using ' by the traffic shaper under SHAPE modehaper queue. It is expressed in bytes ' per sec. ' ' ShapingRate (bytes per sec.) TYPE QOS_SHAPING_RATE DWORD ObjectHdr AS QOS_OBJECT_HDR ShapingRate AS DWORD END TYPE #ENDIF ' #IF NOT %DEF(%QOS_INC) ----------------------------------------------- TYPE QOS SendingFlowspec AS FLOWSPEC ' the flow spec for data sending ReceivingFlowspec AS FLOWSPEC ' the flow spec for data receiving ProviderSpecific AS WSABUF ' additional provider-specific stuff END TYPE '------------------------------------------------------------------------------ ' WinSock 2 ext. - Manifest constants for return values of condition function '------------------------------------------------------------------------------ %CF_ACCEPT = &H0000 %CF_REJECT = &H0001 %CF_DEFER = &H0002 '------------------------------------------------------------------------------ ' WinSock 2 ext. - Manifest constants for shutdown() '------------------------------------------------------------------------------ %SD_RECEIVE = &H00 %SD_SEND = &H01 %SD_BOTH = &H02 '------------------------------------------------------------------------------ ' WinSock 2 extension -- data type and manifest constants for socket groups '------------------------------------------------------------------------------ %SG_UNCONSTRAINED_GROUP = &H01 %SG_CONSTRAINED_GROUP = &H02 '------------------------------------------------------------------------------ ' WinSock 2 extension -- data type for WSAEnumNetworkEvents() '------------------------------------------------------------------------------ TYPE WSANetWorkEvents lNetworkEvents AS LONG iErrorCode(%FD_MAX_EVENTS - 1) AS LONG END TYPE ' WinSock 2 extension -- WSAPROTOCOL_INFO structure and associated ' manifest constants #IF NOT %DEF(%GUID_DEFINED) TYPE GUIDAPI Data1 AS DWORD Data2 AS WORD Data3 AS WORD Data4 AS STRING * 8 END TYPE %GUID_DEFINED = 1 #ENDIF %MAX_PROTOCOL_CHAIN = 7 %BASE_PROTOCOL = 1 %LAYERED_PROTOCOL = 0 TYPE WSAPROTOCOLCHAIN ChainLen AS LONG ' the length of the chain (=0, layered protocol; =1, base protocol; >1, protocol chain) ChainEntries(0 TO %MAX_PROTOCOL_CHAIN - 1) AS DWORD ' a list of dwCatalogEntryIds END TYPE %WSAPROTOCOL_LEN = 255 TYPE WSAPROTOCOL_INFO dwServiceFlags1 AS DWORD dwServiceFlags2 AS DWORD dwServiceFlags3 AS DWORD dwServiceFlags4 AS DWORD dwProviderFlags AS DWORD ProviderId AS GUIDAPI dwCatalogEntryId AS DWORD ProtocolChain AS WSAPROTOCOLCHAIN iVersion AS LONG iAddressFamily AS LONG iMaxSockAddr AS LONG iMinSockAddr AS LONG iSocketType AS LONG iProtocol AS LONG iProtocolMaxOffset AS LONG iNetworkByteOrder AS LONG iSecurityScheme AS LONG dwMessageSize AS DWORD dwProviderReserved AS DWORD szProtocol AS ASCIIZ * (%WSAPROTOCOL_LEN + 1) END TYPE ' Flag bit definitions for dwProviderFlags %PFL_MULTIPLE_PROTO_ENTRIES = &H00000001 %PFL_RECOMMENDED_PROTO_ENTRY = &H00000002 %PFL_HIDDEN = &H00000004 %PFL_MATCHES_PROTOCOL_ZERO = &H00000008 ' Flag bit definitions for dwServiceFlags1 %XP1_CONNECTIONLESS = &H00000001 %XP1_GUARANTEED_DELIVERY = &H00000002 %XP1_GUARANTEED_ORDER = &H00000004 %XP1_MESSAGE_ORIENTED = &H00000008 %XP1_PSEUDO_STREAM = &H00000010 %XP1_GRACEFUL_CLOSE = &H00000020 %XP1_EXPEDITED_DATA = &H00000040 %XP1_CONNECT_DATA = &H00000080 %XP1_DISCONNECT_DATA = &H00000100 %XP1_SUPPORT_BROADCAST = &H00000200 %XP1_SUPPORT_MULTIPOINT = &H00000400 %XP1_MULTIPOINT_CONTROL_PLANE = &H00000800 %XP1_MULTIPOINT_DATA_PLANE = &H00001000 %XP1_QOS_SUPPORTED = &H00002000 %XP1_INTERRUPT = &H00004000 %XP1_UNI_SEND = &H00008000 %XP1_UNI_RECV = &H00010000 %XP1_IFS_HANDLES = &H00020000 %XP1_PARTIAL_MESSAGE = &H00040000 %BIGENDIAN = &H0000 %LITTLEENDIAN = &H0001 %SECURITY_PROTOCOL_NONE = &H0000 ' WinSock 2 extension -- manifest constants for WSAJoinLeaf() %JL_SENDER_ONLY = &H01 %JL_RECEIVER_ONLY = &H02 %JL_BOTH = &H04 ' WinSock 2 extension -- manifest constants for WSASocket() %WSA_FLAG_OVERLAPPED = &H01 %WSA_FLAG_MULTIPOINT_C_ROOT = &H02 %WSA_FLAG_MULTIPOINT_C_LEAF = &H04 %WSA_FLAG_MULTIPOINT_D_ROOT = &H08 %WSA_FLAG_MULTIPOINT_D_LEAF = &H10 ' WinSock 2 extension -- manifest constants for WSAIoctl() %IOC_UNIX = &H00000000 %IOC_WS2 = &H08000000 %IOC_PROTOCOL = &H10000000 %IOC_VENDOR = &H18000000 %SIOCSHIWAT = &H80047300 %SIO_ASSOCIATE_HANDLE = &H88000001 %SIO_ENABLE_CIRCULAR_QUEUEING = &H28000002 %SIO_FIND_ROUTE = &H48000003 %SIO_FLUSH = &H28000004 %SIO_GET_BROADCAST_ADDRESS = &H48000005 %SIO_GET_EXTENSION_FUNCTION_POINTER = &HC8000006 %SIO_GET_QOS = &HC8000007 %SIO_GET_GROUP_QOS = &HC8000008 %SIO_MULTIPOINT_LOOPBACK = &H88000009 %SIO_MULTICAST_SCOPE = &H8800000A %SIO_SET_QOS = &H8800000B %SIO_SET_GROUP_QOS = &H8800000C %SIO_TRANSLATE_HANDLE = &HC800000D %SIO_ROUTING_INTERFACE_QUERY = &HC8000014 %SIO_ROUTING_INTERFACE_CHANGE = &H88000015 %SIO_ADDRESS_LIST_QUERY = &H48000016 %SIO_ADDRESS_LIST_CHANGE = &H28000017 %SIO_QUERY_TARGET_PNP_HANDLE = &H48000018 ' WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl %TH_NETDEV = &H00000001 %TH_TAPI = &H00000002 ' Manifest constants and type definitions related to name resolution and ' registration (RNR) API #IF NOT %DEF(%BLOB_DEFINED) %BLOB_DEFINED = 1 TYPE BLOB cbSize AS DWORD pBlobData AS BYTE PTR END TYPE #ENDIF ' Service Install Flags %SERVICE_MULTIPLE = &H00000001 ' & Name Spaces %NS_ALL = 0 %NS_SAP = 1 %NS_NDS = 2 %NS_PEER_BROWSE = 3 %NS_SLP = 5 %NS_DHCP = 6 %NS_TCPIP_LOCAL = 10 %NS_TCPIP_HOSTS = 11 %NS_DNS = 12 %NS_NETBT = 13 %NS_WINS = 14 %NS_NBP = 20 %NS_MS = 30 %NS_STDA = 31 %NS_NTDS = 32 %NS_X500 = 40 %NS_NIS = 41 %NS_NISPLUS = 42 %NS_WRQ = 50 %NS_NETDES = 60 ' Network Designers Limited ' Resolution flags for WSAGetAddressByName(). ' Note these are also used by the 1.1 API GetAddressByName, so ' leave them around. %RES_UNUSED_1 = &H00000001 %RES_FLUSH_CACHE = &H00000002 #IF NOT %DEF(%RES_SERVICE) %RES_SERVICE = &H00000004 #ENDIF ' Well known value names for Service Types $SERVICE_TYPE_VALUE_IPXPORT = "IpxSocket" $SERVICE_TYPE_VALUE_SAPID = "SapId" $SERVICE_TYPE_VALUE_TCPPORT = "TcpPort" $SERVICE_TYPE_VALUE_UDPPORT = "UdpPort" $SERVICE_TYPE_VALUE_OBJECTID = "ObjectId" #IF NOT %DEF(%CSADDR_DEFINED) '------------------------------------------------ ' SockAddr Information TYPE SOCKET_ADDRESS lpSocaddr AS SOCKADDR PTR iSockaddrLength AS LONG END TYPE ' CSAddr Information TYPE CSADDR_INFO LocalAddr AS SOCKET_ADDRESS RemoteAddr AS SOCKET_ADDRESS iSocketType AS LONG iProtocol AS LONG END TYPE #ENDIF ' #IF NOT %DEF(%CSADDR_DEFINED) ---------------------------------------- ' Address list returned via SIO_ADDRESS_LIST_QUERY TYPE SOCKET_ADDRESS_LIST iAddressCount AS LONG Address(0 TO 0) AS SOCKET_ADDRESS END TYPE ' Address Family/Protocol Tuples TYPE AFPROTOCOLS iAddressFamily AS LONG iProtocol AS LONG END TYPE ' Client Query API Typedefs ' The comparators %COMP_EQUAL = 0 %COMP_NOTLESS = 1 TYPE WSAVersion dwVersion AS DWORD ecHow AS LONG END TYPE TYPE WSAQUERYSET dwSize AS DWORD lpszServiceInstanceName AS ASCIIZ PTR lpServiceClassId AS GUIDAPI PTR lpVersion AS WSAVERSION PTR lpszComment AS ASCIIZ PTR dwNameSpace AS DWORD lpNSProviderId AS GUIDAPI PTR lpszContext AS ASCIIZ PTR dwNumberOfProtocols AS DWORD lpafpProtocols AS AFPROTOCOLS PTR lpszQueryString AS ASCIIZ PTR dwNumberOfCsAddrs AS DWORD lpcsaBuffer AS CSADDR_INFO PTR dwOutputFlags AS DWORD lpBlob AS BLOB PTR END TYPE %LUP_DEEP = &H0001 %LUP_CONTAINERS = &H0002 %LUP_NOCONTAINERS = &H0004 %LUP_NEAREST = &H0008 %LUP_RETURN_NAME = &H0010 %LUP_RETURN_TYPE = &H0020 %LUP_RETURN_VERSION = &H0040 %LUP_RETURN_COMMENT = &H0080 %LUP_RETURN_ADDR = &H0100 %LUP_RETURN_BLOB = &H0200 %LUP_RETURN_ALIASES = &H0400 %LUP_RETURN_QUERY_STRING = &H0800 %LUP_RETURN_ALL = &H0FF0 %LUP_RES_SERVICE = &H8000 %LUP_FLUSHCACHE = &H1000 %LUP_FLUSHPREVIOUS = &H2000 ' Return flags %RESULT_IS_ALIAS = &H0001 ' Service Address Registration and Deregistration Data Types. %RNRSERVICE_REGISTER = 0 %RNRSERVICE_DEREGISTER = 1 %RNRSERVICE_DELETE = 2 ' Service Installation/Removal Data Types. TYPE WSANSCLASSINFO lpszName AS ASCIIZ PTR dwNameSpace AS DWORD dwValueType AS DWORD dwValueSize AS DWORD lpValue AS BYTE PTR END TYPE TYPE WSASERVICECLASSINFO lpServiceClassId AS GUIDAPI PTR lpszServiceClassName AS ASCIIZ PTR dwCount AS DWORD lpClassInfos AS WSANSCLASSINFO PTR END TYPE TYPE WSANAMESPACE_INFO NSProviderId AS GUIDAPI dwNameSpace AS DWORD fActive AS LONG dwVersion AS DWORD lpszIdentifier AS ASCIIZ PTR END TYPE #ENDIF %SOCKET_BUFFER_SIZE = 512 %ICMP_ECHOREPLY = 0 'echo reply %ICMP_ECHOREQ = 8 'echo request TYPE icmp_hdr icmp_type AS BYTE icmp_code AS BYTE icmp_cksum AS INTEGER icmp_id AS INTEGER icmp_seq AS INTEGER icmp_data AS STRING * 1 END TYPE TYPE ip_hdr ip_hlv AS BYTE ' header length + version (4 bits each) ip_tos AS BYTE ' type of service ip_len AS WORD ' total len ip_id AS WORD ' id ip_off AS WORD ' fragment offset ip_ttl AS BYTE ' time to live ip_p AS BYTE ' protocol ip_cksum AS WORD ip_src AS in_addr ' source address ip_dest AS in_addr ' dest address END TYPE ' TYPE ICMP_OPTIONS Ttl AS BYTE Tos AS BYTE Flags AS BYTE OptionsSize AS BYTE OptionsData AS LONG END TYPE TYPE ICMP_ECHO_REPLY Address AS LONG STATUS AS LONG RoundTripTime AS LONG DataSize AS INTEGER Reserved AS INTEGER DataPointer AS LONG Options AS ICMP_OPTIONS zData AS ASCIIZ * 250 END TYPE #IF (%INCL_WINSOCK_API_PROTOTYPES) '------------------------------------------- DECLARE FUNCTION IcmpCreateFile LIB "icmp.dll" ALIAS "IcmpCreateFile" () AS DWORD DECLARE FUNCTION IcmpCloseHandle LIB "icmp.dll" ALIAS "IcmpCloseHandle" (BYVAL IcmpHandle AS DWORD) AS LONG DECLARE FUNCTION IcmpSendEcho LIB "icmp.dll" ALIAS "IcmpSendEcho" (BYVAL IcmpHandle AS DWORD, BYVAL DestinationAddress AS LONG, RequestData AS ASCIIZ, BYVAL RequestSize AS WORD, RequestOptions AS ANY, ReplyBuffer AS ANY, _ BYVAL ReplySize AS DWORD, BYVAL Tymeout AS DWORD) AS DWORD DECLARE FUNCTION aaccept LIB WSockLib ALIAS "accept" (BYVAL s AS DWORD, saAddr AS ANY, addrlen AS LONG) AS DWORD DECLARE FUNCTION bind LIB WSockLib ALIAS "bind" (BYVAL s AS DWORD, sname AS ANY, BYVAL namelen AS LONG) AS LONG DECLARE FUNCTION closesocket LIB WSockLib ALIAS "closesocket" (BYVAL s AS DWORD) AS LONG DECLARE FUNCTION cconnect LIB WSockLib ALIAS "connect" (BYVAL s AS DWORD, sname AS ANY, BYVAL namelen AS LONG) AS LONG DECLARE FUNCTION ioctlsocket LIB WSockLib ALIAS "ioctlsocket" (BYVAL s AS DWORD, BYVAL cmd AS LONG, argp AS DWORD) AS LONG DECLARE FUNCTION getpeername LIB WSockLib ALIAS "getpeername" (BYVAL s AS DWORD, sname AS ANY, namelen AS LONG) AS LONG DECLARE FUNCTION getsockname LIB WSockLib ALIAS "getsockname" (BYVAL s AS DWORD, sname AS ANY, namelen AS LONG) AS LONG DECLARE FUNCTION getsockopt LIB WSockLib ALIAS "getsockopt" (BYVAL s AS DWORD, BYVAL level AS LONG, BYVAL optname AS LONG, optval AS ANY, optlen AS LONG) AS LONG DECLARE FUNCTION htonl LIB WSockLib ALIAS "htonl" (BYVAL hostlong AS DWORD) AS DWORD DECLARE FUNCTION htons LIB WSockLib ALIAS "htons" (BYVAL hostshort AS WORD) AS WORD DECLARE FUNCTION inet_addr LIB WSockLib ALIAS "inet_addr" (cp AS ASCIIZ) AS DWORD DECLARE FUNCTION inet_ntoa LIB WSockLib ALIAS "inet_ntoa" (inn AS LONG) AS LONG DECLARE FUNCTION listen LIB WSockLib ALIAS "listen" (BYVAL s AS DWORD, BYVAL backlog AS LONG) AS LONG DECLARE FUNCTION ntohl LIB WSockLib ALIAS "ntohl" (BYVAL netlong AS DWORD) AS DWORD DECLARE FUNCTION ntohs LIB WSockLib ALIAS "ntohs" (BYVAL netshort AS WORD) AS WORD DECLARE FUNCTION rrecv LIB WSockLib ALIAS "recv" (BYVAL s AS DWORD, buf AS ANY, BYVAL buflen AS LONG, BYVAL flags AS LONG) AS LONG DECLARE FUNCTION recvfrom LIB WSockLib ALIAS "recvfrom" (BYVAL s AS DWORD, buf AS ANY, BYVAL buflen AS LONG, BYVAL flags AS LONG, saFrom AS ANY, fromlen AS LONG) AS LONG DECLARE FUNCTION sselect LIB WSockLib ALIAS "select" (BYVAL nfds AS LONG, readfds AS fd_setstruc, writefds AS fd_setstruc, exceptfds AS FD_SETstruc, tymeout AS timeval) AS LONG DECLARE FUNCTION ssend LIB WSockLib ALIAS "send" (BYVAL s AS DWORD, buf AS ANY, BYVAL buflen AS LONG, BYVAL flags AS LONG) AS LONG DECLARE FUNCTION sendto LIB WSockLib ALIAS "sendto" (BYVAL s AS DWORD, buf AS ANY, BYVAL buflen AS LONG, BYVAL flags AS LONG, to_addr AS ANY, BYVAL tolen AS LONG) AS LONG DECLARE FUNCTION setsockopt LIB WSockLib ALIAS "setsockopt" (BYVAL s AS DWORD, BYVAL level AS LONG, BYVAL optname AS LONG, optval AS ANY, BYVAL optlen AS LONG) AS LONG DECLARE FUNCTION shutdown LIB WSockLib ALIAS "shutdown" (BYVAL s AS DWORD, BYVAL how AS LONG) AS LONG DECLARE FUNCTION socket LIB WSockLib ALIAS "socket" (BYVAL af AS LONG, BYVAL s_type AS LONG, BYVAL protocol AS LONG) AS DWORD 'Database Functions DECLARE FUNCTION gethostbyaddr LIB WSockLib ALIAS "gethostbyaddr" (address AS ASCIIZ, BYVAL addr_len AS LONG, BYVAL addr_type AS LONG) AS DWORD DECLARE FUNCTION gethostbyname LIB WSockLib ALIAS "gethostbyname" (host_name AS ASCIIZ) AS DWORD DECLARE FUNCTION gethostname LIB WSockLib ALIAS "gethostname" (host_name AS ASCIIZ, BYVAL namelen AS LONG) AS LONG DECLARE FUNCTION getprotobyname LIB WSockLib ALIAS "getprotobyname" (proto_name AS ASCIIZ) AS DWORD DECLARE FUNCTION getprotobynumber LIB WSockLib ALIAS "getprotobynumber" (BYVAL proto AS LONG) AS DWORD DECLARE FUNCTION getservbyname LIB WSockLib ALIAS "getservbyname" (serv_name AS ASCIIZ, proto AS ASCIIZ) AS DWORD DECLARE FUNCTION getservbyport LIB WSockLib ALIAS "getservbyport" (BYVAL lPort AS LONG, proto AS ASCIIZ) AS DWORD ' Microsoft Windows Extension function prototypes DECLARE FUNCTION WSAAsyncSelect LIB WSockLib ALIAS "WSAAsyncSelect" (BYVAL s AS DWORD, BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL lEvent AS LONG) AS LONG DECLARE FUNCTION WSACancelBlockingCall LIB WSockLib ALIAS "WSACancelBlockingCall" () AS LONG DECLARE FUNCTION WSACleanup LIB WSockLib ALIAS "WSACleanup" () AS LONG DECLARE FUNCTION WSAGetLastError LIB WSockLib ALIAS "WSAGetLastError" () AS LONG DECLARE FUNCTION WSAIsBlocking LIB WSockLib ALIAS "WSAIsBlocking" () AS LONG DECLARE FUNCTION WSARecvEx LIB WSockLib ALIAS "WSARecvEx" (BYVAL s AS DWORD, buf AS ANY, BYVAL buflen AS LONG, BYVAL flags AS LONG) AS LONG DECLARE FUNCTION WSASetBlockingHook LIB WSockLib ALIAS "WSASetBlockingHook" (BYVAL lpBlockFunc AS DWORD) AS DWORD DECLARE FUNCTION WSAStartup LIB WSockLib ALIAS "WSAStartup" (BYVAL wVR AS WORD, lpWSAD AS WSAData) AS LONG DECLARE SUB WSASetLastError LIB WSockLib ALIAS "WSASetLastError" (BYVAL iError AS LONG) DECLARE FUNCTION WSAUnhookBlockingHook LIB WSockLib ALIAS "WSAUnhookBlockingHook" () AS LONG 'WSAAsyncGetXByY Functions don't work reliably under 32Bit Windows DECLARE FUNCTION WSAAsyncGetServByName LIB WSockLib ALIAS "WSAAsyncGetServByName" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, serv_name AS ASCIIZ, proto AS ASCIIZ, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSAAsyncGetServByPort LIB WSockLib ALIAS "WSAAsyncGetServByPort" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL lPort AS LONG, proto AS ASCIIZ, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSAAsyncGetProtoByName LIB WSockLib ALIAS "WSAAsyncGetProtoByName" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, proto_name AS ASCIIZ, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSAAsyncGetProtoByNumber LIB WSockLib ALIAS "WSAAsyncGetProtoByNumber" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL number AS LONG, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSAAsyncGetHostByName LIB WSockLib ALIAS "WSAAsyncGetHostByName" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, host_name AS ASCIIZ, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSAAsyncGetHostByAddr LIB WSockLib ALIAS "WSAAsyncGetHostByAddr" (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, address AS ASCIIZ, BYVAL addr_len AS LONG, BYVAL addr_type AS LONG, buf AS ASCIIZ, BYVAL buflen AS LONG) AS DWORD DECLARE FUNCTION WSACancelAsyncRequest LIB WSockLib ALIAS "WSACancelAsyncRequest" (BYVAL hAsyncTaskHandle AS DWORD) AS LONG #IF NOT %DEF(%WSOCK32) ' WinSock 2 API new function prototypes DECLARE FUNCTION WSAAccept LIB "ws2_32.dll" ALIAS "WSAAccept" (BYVAL s AS DWORD, saAddr AS SOCKADDR, addrlen AS LONG, lpfnCondition AS DWORD, dwCallbackData AS DWORD) AS DWORD DECLARE FUNCTION WSACloseEvent LIB "ws2_32.dll" ALIAS "WSACloseEvent" (BYVAL h AS DWORD) AS LONG DECLARE FUNCTION WSAConnect LIB "ws2_32.dll" ALIAS "WSAConnect" (BYVAL s AS DWORD, sname AS SOCKADDR, BYVAL namelen AS LONG, lpCallerData AS WSABUF, lpCalleeData AS WSABUF, lpSQOS AS QOS, lpGQOS AS QOS) AS LONG DECLARE FUNCTION WSACreateEvent LIB "ws2_32.dll" ALIAS "WSACreateEvent" () AS DWORD DECLARE FUNCTION WSADuplicateSocket LIB "ws2_32.dll" ALIAS "WSADuplicateSocketA" (BYVAL s AS DWORD, BYVAL dwProcessId AS DWORD, lpProtocolInfo AS WSAPROTOCOL_INFO) AS LONG DECLARE FUNCTION WSAEnumNetworkEvents LIB "ws2_32.dll" ALIAS "WSAEnumNetworkEvents" (BYVAL s AS DWORD, BYVAL hEventObject AS DWORD, lpNetworkEvents AS WSANETWORKEVENTS) AS LONG DECLARE FUNCTION WSAEnumProtocols LIB "ws2_32.dll" ALIAS "WSAEnumProtocolsA" (lpiProtocols AS LONG, lpProtocolBuffer AS WSAPROTOCOL_INFO, lpdwBufferLength AS DWORD) AS LONG DECLARE FUNCTION WSAEventSelect LIB "ws2_32.dll" ALIAS "WSAEventSelect" (BYVAL s AS DWORD, BYVAL hEventObject AS DWORD, BYVAL lNetworkEvents AS LONG) AS LONG DECLARE FUNCTION WSAGetOverlappedResult LIB "ws2_32.dll" ALIAS "WSAGetOverlappedResult" (BYVAL s AS DWORD, lpOverlapped AS OVERLAPPED, lpcbTransfer AS DWORD, BYVAL fWait AS LONG, lpdwFlags AS DWORD) AS LONG DECLARE FUNCTION WSAGetQOSByName LIB "ws2_32.dll" ALIAS "WSAGetQOSByName" (BYVAL s AS DWORD, lpQOSName AS WSABUF, lpQOS AS QOS) AS LONG DECLARE FUNCTION WSAHtonl LIB "ws2_32.dll" ALIAS "WSAHtonl" (BYVAL s AS DWORD, BYVAL hostlong AS DWORD, lpnetlong AS DWORD) AS LONG DECLARE FUNCTION WSAHtons LIB "ws2_32.dll" ALIAS "WSAHtons" (BYVAL s AS DWORD, BYVAL hostshort AS WORD, lpnetshort AS WORD) AS LONG DECLARE FUNCTION WSAIoctl LIB "ws2_32.dll" ALIAS "WSAIoctl" (BYVAL s AS DWORD, BYVAL dwIoControlCode AS DWORD, lpvInBuffer AS DWORD, BYVAL cbInBuffer AS DWORD, lpvOutBuffer AS DWORD, BYVAL cbOutBuffer AS DWORD, _ lpcbBytesReturned AS DWORD, lpOverlapped AS OVERLAPPED, lpCompletionRoutine AS DWORD) AS LONG DECLARE FUNCTION WSAJoinLeaf LIB "ws2_32.dll" ALIAS "WSAJoinLeaf" (BYVAL s AS DWORD, sname AS SOCKADDR, BYVAL namelen AS LONG, lpCallerData AS WSABUF, lpCalleeData AS WSABUF, lpSQOS AS QOS, lpGQOS AS QOS, BYVAL dwFlags AS DWORD) AS DWORD DECLARE FUNCTION WSANtohl LIB "ws2_32.dll" ALIAS "WSANtohl" (BYVAL s AS DWORD, BYVAL netlong AS DWORD, lphostlong AS DWORD) AS LONG DECLARE FUNCTION WSANtohs LIB "ws2_32.dll" ALIAS "WSANtohs" (BYVAL s AS DWORD, BYVAL netshort AS WORD, lphostshort AS WORD) AS LONG DECLARE FUNCTION WSARecv LIB "ws2_32.dll" ALIAS "WSARecv" (BYVAL s AS DWORD, lpBuffers AS WSABUF, BYVAL dwBufferCount AS DWORD, lpNumberOfBytesRecvd AS DWORD, lpFlags AS DWORD, lpOverlapped AS OVERLAPPED, _ BYVAL lpCompletionRoutine AS DWORD) AS LONG DECLARE FUNCTION WSARecvDisconnect LIB "ws2_32.dll" ALIAS "WSARecvDisconnect" (BYVAL s AS DWORD, lpInboundDisconnectData AS WSABUF) AS LONG DECLARE FUNCTION WSARecvFrom LIB "ws2_32.dll" ALIAS "WSARecvFrom" (BYVAL s AS DWORD, lpBuffers AS WSABUF, BYVAL dwBufferCount AS DWORD, lpNumberOfBytesRecvd AS DWORD, lpFlags AS DWORD, lpFrom AS SOCKADDR, _ lpFromlen AS LONG, lpOverlapped AS OVERLAPPED, BYVAL lpCompletionRoutine AS DWORD) AS LONG DECLARE FUNCTION WSAResetEvent LIB "ws2_32.dll" ALIAS "WSAResetEvent" (BYVAL hEvent AS DWORD) AS LONG DECLARE FUNCTION WSASend LIB "ws2_32.dll" ALIAS "WSASend" (BYVAL s AS DWORD, lpBuffers AS WSABUF, BYVAL dwBufferCount AS DWORD, lpNumberOfBytesSent AS DWORD, BYVAL dwFlags AS DWORD, lpOverlapped AS OVERLAPPED, _ BYVAL lpCompletionRoutine AS DWORD) AS LONG DECLARE FUNCTION WSASendDisconnect LIB "ws2_32.dll" ALIAS "WSASendDisconnect" (BYVAL s AS DWORD, lpOutboundDisconnectData AS WSABUF) AS LONG DECLARE FUNCTION WSASendTo LIB "ws2_32.dll" ALIAS "WSASendTo" (BYVAL s AS DWORD, lpBuffers AS WSABUF, BYVAL dwBufferCount AS DWORD, lpNumberOfBytesSent AS DWORD, BYVAL dwFlags AS DWORD, lpTo AS SOCKADDR, BYVAL iTolen AS LONG, _ lpOverlapped AS OVERLAPPED, BYVAL lpCompletionRoutine AS DWORD) AS LONG DECLARE FUNCTION WSASetEvent LIB "ws2_32.dll" ALIAS "WSASetEvent" (BYVAL hEvent AS DWORD) AS LONG DECLARE FUNCTION WSASocket LIB "ws2_32.dll" ALIAS "WSASocketA" (BYVAL af AS LONG, BYVAL ltype AS LONG, BYVAL protocol AS LONG, lpProtocolInfo AS WSAPROTOCOL_INFO, BYVAL g AS DWORD, BYVAL dwFlags AS DWORD) AS DWORD DECLARE FUNCTION WSAWaitForMultipleEvents LIB "ws2_32.dll" ALIAS "WSAWaitForMultipleEvents" (BYVAL cEvents AS DWORD, BYVAL lphEvents AS DWORD PTR, BYVAL fWaitAll AS LONG, BYVAL dwTimeout AS DWORD, BYVAL fAlertable AS LONG) AS DWORD DECLARE FUNCTION WSAAddressToString LIB "ws2_32.dll" ALIAS "WSAAddressToStringA" (lpsaAddress AS SOCKADDR, BYVAL dwAddressLength AS DWORD, lpProtocolInfo AS WSAPROTOCOL_INFO, lpszAddressString AS ASCIIZ, _ lpdwAddressStringLength AS DWORD) AS LONG DECLARE FUNCTION WSAStringToAddress LIB "ws2_32.dll" ALIAS "WSAStringToAddressA" (AddressString AS ASCIIZ, BYVAL AddressFamily AS LONG, lpProtocolInfo AS WSAPROTOCOL_INFO, lpAddress AS SOCKADDR, lpAddressLength AS LONG) AS LONG ' Registration and Name Resolution API functions DECLARE FUNCTION WSALookupServiceBegin LIB "ws2_32.dll" ALIAS "WSALookupServiceBeginA" (lpqsRestrictions AS WSAQUERYSET, BYVAL dwControlFlags AS DWORD, lphLookup AS DWORD) AS LONG DECLARE FUNCTION WSALookupServiceNext LIB "ws2_32.dll" ALIAS "WSALookupServiceNextA" (BYVAL hLookup AS DWORD, BYVAL dwControlFlags AS DWORD, lpdwBufferLength AS DWORD, lpsqResults AS WSAQUERYSET) AS LONG DECLARE FUNCTION WSALookupServiceEnd LIB "ws2_32.dll" ALIAS "WSALookupServiceEnd" (BYVAL hLookup AS DWORD) AS LONG DECLARE FUNCTION WSAInstallServiceClass LIB "ws2_32.dll" ALIAS "WSAInstallServiceClassA" (lpServiceClassInfo AS WSASERVICECLASSINFO) AS LONG DECLARE FUNCTION WSARemoveServiceClass LIB "ws2_32.dll" ALIAS "WSARemoveServiceClass" (lpServiceClassId AS GUIDAPI) AS LONG DECLARE FUNCTION WSAGetServiceClassInfo LIB "ws2_32.dll" ALIAS "WSAGetServiceClassInfoA" (lpProviderId AS GUIDAPI, lpServiceClassId AS GUIDAPI, lpdwBufSize AS DWORD, lpServiceClassInfo AS WSASERVICECLASSINFO) AS LONG DECLARE FUNCTION WSAEnumNameSpaceProviders LIB "ws2_32.dll" ALIAS "WSAEnumNameSpaceProvidersA" (lpdwBufferLength AS DWORD, lpnspBuffer AS WSANAMESPACE_INFO) AS LONG DECLARE FUNCTION WSAGetServiceClassNameByClassId LIB "ws2_32.dll" ALIAS "WSAGetServiceClassNameByClassIdA" (lpServiceClassId AS GUIDAPI, lpszServiceClassName AS ASCIIZ, lpdwBufferLength AS DWORD) AS LONG DECLARE FUNCTION WSASetService LIB "ws2_32.dll" ALIAS "WSASetServiceA" (lpqsRegInfo AS WSAQUERYSET, BYVAL essoperation AS LONG, BYVAL dwControlFlags AS DWORD) AS LONG DECLARE FUNCTION WSAProviderConfigChange LIB "ws2_32.dll" ALIAS "WSAProviderConfigChange" (lpNotificationHandle AS DWORD, lpOverlapped AS OVERLAPPED, BYVAL lpCompletionRoutine AS DWORD) AS LONG #ENDIF ' #IF (%WSOCK32) #ENDIF ' #IF (%INCL_WINSOCK_API_PROTOTYPES) ----------------------------------- '------------------------------------------------------------------------------ FUNCTION h_errno () AS LONG FUNCTION = WSAGetLastError END FUNCTION '------------------------------------------------------------------------------ ' Windows message parameter composition and decomposition macros. '------------------------------------------------------------------------------ ' WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation ' when constructing the response to a WSAAsyncGetXByY() routine. '------------------------------------------------------------------------------ FUNCTION WSAMAKEASYNCREPLY (BYVAL wbuflen AS WORD, BYVAL werror AS WORD) AS LONG FUNCTION = MAKLNG(wbuflen,werror) END FUNCTION '------------------------------------------------------------------------------ ' WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation ' when constructing the response to WSAAsyncSelect(). '------------------------------------------------------------------------------ FUNCTION WSAMAKESELECTREPLY (BYVAL wevent AS WORD, BYVAL werror AS WORD) AS LONG FUNCTION = MAKLNG(wevent,werror) END FUNCTION '------------------------------------------------------------------------------ ' WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application to ' extract buffer length from the lParam in the response to a WSAAsyncGetXByY(). '------------------------------------------------------------------------------ FUNCTION WSAGETASYNCBUFLEN (BYVAL lParam AS LONG) AS WORD FUNCTION = LOWRD(lParam) END FUNCTION '------------------------------------------------------------------------------ ' WSAGETASYNCERROR is intended for use by the Windows Sockets application to ' extract the error code from the lParam in the response to a WSAGetXByY(). '------------------------------------------------------------------------------ FUNCTION WSAGETASYNCERROR (BYVAL lParam AS LONG) AS WORD FUNCTION = HIWRD(lParam) END FUNCTION '------------------------------------------------------------------------------ ' WSAGETSELECTEVENT is intended for use by the Windows Sockets application to ' extract the event code from the lParam in the response to a WSAAsyncSelect(). '------------------------------------------------------------------------------ FUNCTION WSAGETSELECTEVENT (BYVAL lParam AS LONG) AS WORD FUNCTION = LOWRD(lParam) END FUNCTION '------------------------------------------------------------------------------ ' WSAGETSELECTERROR is intended for use by the Windows Sockets application to ' extract the error code from the lParam in the response to a WSAAsyncSelect(). '------------------------------------------------------------------------------ FUNCTION WSAGETSELECTERROR (BYVAL lParam AS LONG) AS WORD FUNCTION = HIWRD(lParam) END FUNCTION '------------------------------------------------------------------------------ 'Return a pointer to all of the host IP addresses '------------------------------------------------------------------------------ FUNCTION GetHostAddr () AS DWORD DIM hhostent AS hostent PTR DIM hostname AS ASCIIZ * 32 DIM result AS LONG result = GetHostName(hostname, SIZEOF(hostname)) IF result THEN IF LEN(hostname) THEN hhostent = GetHostByName(hostname) IF hhostent THEN FUNCTION = @hhostent.h_list END IF END IF END IF END FUNCTION #ENDIF ' %IF Not %Def(%WSOCK_X_INC)
#COMPILE EXE '#Win 8.04# #DIM ALL #INCLUDE "WIN32API.INC" '#2005-01-27# %SNLEN = 80 %MAX_HOSTNAME_LEN = 128 %WSADESCRIPTION_LEN = 256 %WSASYS_STATUS_LEN = 128 %AI_PASSIVE = 1 %AI_CANONNAME = 2 %AI_NUMERICHOST = 4 'ai_flags... %AI_PASSIVE = &h00000001 'The socket address will be used in a call to the bind function. %AI_CANONNAME = &h00000002 'The canonical name is returned in the first ai_canonname member. %AI_NUMERICHOST = &h00000004 'The nodename parameter passed to the getaddrinfo function must be a numeric string. %AI_ADDRCONFIG = &h00000400 'The getaddrinfo will resolve only if a global address is configured. The IPv6 and IPv4 loopback address is not considered a valid global address. This option is only supported on Windows Vista or later. %AI_NON_AUTHORITATIVE = &h00004000 'The address information can be from a non-authoritative namespace provider. This option is only supported on Windows Vista or later for the NS_EMAIL namespace. %AI_SECURE = &h00008000 'The address information is from a secure channel. This option is only supported on Windows Vista or later for the NS_EMAIL namespace. %AI_RETURN_PREFERRED_NAMES = &h00010000 'The address information is for a preferred name for a user. This option is only supported on Windows Vista or later for the NS_EMAIL namespace. 'ai_family... %AF_UNSPEC = 0 'The address family is unspecified. %AF_INET = 2 'The Internet Protocol version 4 (IPv4) address family. %AF_NETBIOS = 17 'The NetBIOS address family. This address family is only supported if a Windows Sockets provider for NetBIOS is installed. %AF_INET6 = 23 'The Internet Protocol version 6 (IPv6) address family. %AF_IRDA = 26 'The Infrared Data Association (IrDA) address family. This address family is only supported if the computer has an infrared port and driver installed. %AF_BTM = 32 'The Bluetooth address family. This address family is only supported if a Bluetooth adapter is installed on Windows Server 2003 or later. 'ai_sockttype... %SOCK_STREAM = 1 'Provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. Uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6). 'If the ai_family member is AF_IRDA, then SOCK_STREAM is the only supported socket type. %SOCK_DGRAM = 2 'Supports datagrams, which are connectionless, unreliable buffers of a fixed (typically small) maximum length. Uses the User Datagram Protocol (UDP) for the Internet address family (AF_INET or AF_INET6). %SOCK_RAW = 3 'Provides a raw socket that allows an application to manipulate the next upper-layer protocol header. To manipulate the IPv4 header, the IP_HDRINCL socket option must be set on the socket. To manipulate the IPv6 header, 'the IPV6_HDRINCL socket option must be set on the socket. %SOCK_RDM = 4 'Provides a reliable message datagram. An example of this type is the Pragmatic General Multicast (PGM) multicast protocol implementation in Windows, often referred to as reliable multicast programming. %SOCK_SEQPACKET = 5 'Provides a pseudo-stream packet based on datagrams. 'ai_protocol %IPPROTO_TCP = 6 'The Transmission Control Protocol (TCP). This is a possible value when the ai_family member is AF_INET or AF_INET6 and the ai_socktype member is SOCK_STREAM. %IPPROTO_UDP = 17 'The User Datagram Protocol (UDP). This is a possible value when the ai_family member is AF_INET or AF_INET6 and the type parameter is SOCK_DGRAM. %IPPROTO_RM = 113 'The PGM protocol for reliable multicast. This is a possible value when the ai_family member is AF_INET and the ai_socktype member is SOCK_RDM. On the Windows SDK released for Windows Vista and later, this value is also called IPPROTO_PGM. TYPE WSAdata wVersion AS WORD wHighVersion AS WORD szDescription AS ASCIIZ * (%WSADESCRIPTION_LEN + 1) szSystemStatus AS ASCIIZ * (%WSASYS_STATUS_LEN + 1) iMaxSockets AS WORD iMaxUdpDg AS WORD lpVendorInfo AS ASCIIZ PTR END TYPE TYPE S_un_b s_b1 AS BYTE s_b2 AS BYTE s_b3 AS BYTE s_b4 AS BYTE END TYPE TYPE S_un_w s_w1 AS WORD s_w2 AS WORD END TYPE UNION S_addr S_un_b S_un_w S_addr AS DWORD END UNION TYPE in_addr S_addr AS DWORD END TYPE TYPE SOCKADDR_IN sin_family AS WORD sin_port AS WORD sin_addr AS in_addr sin_zero AS STRING * 8 END TYPE TYPE SOCKADDR sa_family AS WORD 'Address family sa_data AS STRING * 14 'Up to 14 bytes of direct address END TYPE TYPE ADDRINFO ai_flags AS DWORD 'AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST ai_family AS DWORD 'PF_INET ai_sockttype AS DWORD 'SOCK_RAW, SOCK_STREAM, or SOCK_DGRAM ai_protocol AS DWORD 'IPPROTO_TCP ai_addrlen AS DWORD 'Length in bytes of ai_addr ai_canonname AS ASCIIZ PTR 'Canonical name for the host ai_addr AS SOCKADDR PTR 'Binary address ai_next AS ADDRINFO PTR 'Next structure END TYPE DECLARE FUNCTION WSAStartup LIB "wsock32.dll" ALIAS "WSAStartup"( _ BYVAL wVR AS WORD, _ lpWSAD AS WSAData) AS LONG DECLARE FUNCTION WSACleanup LIB "wsock32.dll" ALIAS "WSACleanup"() AS LONG DECLARE FUNCTION GetAddrInfo LIB "ws2_32.dll" ALIAS "getaddrinfo"( _ NodeName AS ASCIIZ, _ ServName AS ASCIIZ, _ Hints AS ADDRINFO, _ BYVAL pRes AS ADDRINFO POINTER) AS LONG DECLARE FUNCTION FreeAddrInfo LIB "ws2_32.dll" ALIAS "freeaddrinfo"(AddrInfoPointer AS DWORD)AS LONG '______________________________________________________________________________ FUNCTION Ai_FlagsToString(ai_flags AS DWORD) AS STRING LOCAL sBuffer AS STRING IF ai_flags THEN IF (ai_flags AND %AI_PASSIVE) THEN sBuffer = "AI_PASSIVE" IF (ai_flags AND %AI_CANONNAME) THEN sBuffer = sBuffer & " AI_CANONNAME" IF (ai_flags AND %AI_NUMERICHOST) THEN sBuffer = sBuffer & " AI_NUMERICHOST" IF (ai_flags AND %AI_ADDRCONFIG) THEN sBuffer = sBuffer & " AI_ADDRCONFIG" IF (ai_flags AND %AI_SECURE) THEN sBuffer = sBuffer & " AI_SECURE" IF (ai_flags AND %AI_RETURN_PREFERRED_NAMES) THEN sBuffer = sBuffer & " AI_RETURN_PREFERRED_NAMES" END IF FUNCTION = LTRIM$(sBuffer) ELSE FUNCTION = "AI_NONE" END IF END FUNCTION '______________________________________________________________________________ FUNCTION Ai_FamilyToString(ai_family AS DWORD) AS STRING SELECT CASE ai_family CASE %AF_UNSPEC : FUNCTION = "AF_UNSPEC" CASE %AF_INET : FUNCTION = "AF_INET" CASE %AF_NETBIOS : FUNCTION = "AF_NETBIOS" CASE %AF_INET6 : FUNCTION = "AF_INET6" CASE %AF_IRDA : FUNCTION = "AF_IRDA" CASE %AF_BTM : FUNCTION = "AF_BTM" CASE ELSE : FUNCTION = "AF_UNKNOWN" & STR$(ai_family) END SELECT END FUNCTION '______________________________________________________________________________ FUNCTION Ai_SocktTypeToString(ai_sockttype AS DWORD) AS STRING SELECT CASE ai_sockttype CASE %SOCK_STREAM : FUNCTION = "SOCK_STREAM" CASE %SOCK_DGRAM : FUNCTION = "SOCK_DGRAM" CASE %SOCK_RAW : FUNCTION = "SOCK_RAW" CASE %SOCK_RDM : FUNCTION = "SOCK_RDM" CASE %SOCK_SEQPACKET : FUNCTION = "SOCK_SEQPACKET" CASE ELSE : FUNCTION = "SOCK_UNKNOWN" & STR$(ai_sockttype) END SELECT END FUNCTION '______________________________________________________________________________ FUNCTION Ai_ProtocolToString(ai_protocol AS DWORD) AS STRING SELECT CASE ai_protocol CASE 0 : FUNCTION = "IPPROTO_ZERO" 'Not_IPv4_nor_IPv6 CASE %IPPROTO_TCP : FUNCTION = "IPPROTO_TCP" CASE %IPPROTO_UDP : FUNCTION = "IPPROTO_UDP" CASE %IPPROTO_RM : FUNCTION = "IPPROTO_RM" CASE ELSE : FUNCTION = "IPPROTO_UNKNOWN" & STR$(ai_protocol) END SELECT END FUNCTION '______________________________________________________________________________ FUNCTION ipDwordToDot(ip AS DWORD) AS STRING LOCAL pByte AS BYTE PTR pByte = VARPTR(ip) FUNCTION = USING$("#_.#_.#_.#", @pByte, @pByte[1], @pByte[2], @pByte[3]) END FUNCTION '______________________________________________________________________________ FUNCTION WinErrMsg(BYVAL ErrNum AS DWORD)AS STRING LOCAL hLib AS DWORD LOCAL errorFlag AS DWORD LOCAL os AS OSVERSIONINFO LOCAL zError AS ASCIIZ * 1024 SELECT CASE AS LONG ErrNum CASE 2100 TO 2999 'NT, Network, thank Greg Turgeon %NETWORK_ERROR_FIRST TO %NETWORK_ERROR_LAST os.dwOSVersionInfoSize = SIZEOF(os) GetVersionEx os IF os.dwPlatformId = %VER_PLATFORM_WIN32_NT THEN _ hLib = LoadLibraryEx("NETMSG.DLL", BYVAL 0, %LOAD_LIBRARY_AS_DATAFILE) CASE 12000 TO 12171 'Internet %INTERNET_ERROR_FIRST TO %NTERNET_ERROR_LAST hLib = LoadLibraryEx("WININET.DLL", BYVAL 0, %LOAD_LIBRARY_AS_DATAFILE) END SELECT errorFlag = %FORMAT_MESSAGE_FROM_SYSTEM OR %FORMAT_MESSAGE_IGNORE_INSERTS OR _ %FORMAT_MESSAGE_MAX_WIDTH_MASK IF hLib THEN errorFlag = errorFlag OR %FORMAT_MESSAGE_FROM_HMODULE IF FormatMessage(errorFlag, BYVAL hLib, ErrNum, MakeLangID(%LANG_NEUTRAL, %SUBLANG_DEFAULT), _ zError, SIZEOF(zError), BYVAL 0) THEN FUNCTION = "Error" & STR$(ErrNum) & ":" & $SPC & zError ELSE FUNCTION = "Error" & STR$(ErrNum) & ", unknown." END IF IF hLib THEN FreeLibrary hLib END FUNCTION '______________________________________________________________________________ FUNCTION Memo(TxtDef AS STRING, TxtVar AS STRING) AS STRING STATIC sBuffer AS STRING sBuffer = sBuffer & TxtDef & $TAB & TxtVar & $CRLF REPLACE $NUL WITH "." IN sBuffer FUNCTION = sBuffer END FUNCTION '______________________________________________________________________________ FUNCTION PBMAIN() AS LONG LOCAL WsaInfo AS WsaData LOCAL Retval AS LONG LOCAL NodeName AS ASCIIZ * %MAX_HOSTNAME_LEN LOCAL ServName AS ASCIIZ * %SNLEN LOCAL Hints AS ADDRINFO LOCAL pResFirst AS ADDRINFO POINTER LOCAL pRes AS ADDRINFO POINTER LOCAL pAi_Addr_In AS SOCKADDR_IN POINTER LOCAL pAi_Addr AS SOCKADDR PTR LOCAL sBuffer AS STRING NodeName = "microsoft.com" 'Microsoft.com or ip 67.17.204.214 'NodeName = "ibm.com" 'NodeName = "powerbasic.com" ServName = "http" 'Either a service name or port number. FTP-21, HTTP-80 WSAStartUp &h0202, WsaInfo Retval = GetAddrInfo(NodeName, ServName, Hints, BYVAL VARPTR(pResFirst)) Memo "NodeName: ", (NodeName) Memo "ServName: ", (ServName) Memo "Error: ", WinErrMsg(Retval) 'Success returns zero. Failure returns a nonzero Windows Sockets error code WSACleanUp IF Retval = %ERROR_SUCCESS THEN pRes = pResFirst DO Memo " ", $CRLF Memo "addr info pointer:", HEX$(pRes) Memo "flags: ", Ai_FlagsToString(@pRes.ai_flags) Memo "family: ", Ai_FamilyToString(@pRes.ai_family) Memo "sockttype: ", Ai_sockttypeToString(@pRes.ai_sockttype) Memo "protocol: ", Ai_ProtocolToString(@pRes.ai_protocol) Memo "canonical-addr: ", HEX$(@pRes.ai_canonname) IF @pRes.ai_canonname THEN Memo "canonical-string: ", (@pRes.@ai_canonname) END IF Memo "addrlen: ", FORMAT$(@pRes.ai_addrlen) pAi_Addr = @pRes.ai_addr Memo "addr-sa-family: ", Ai_FamilyToString((@pAi_Addr.sa_family)) IF @pAi_Addr.sa_family = %AF_INET THEN pAi_Addr_In = @pRes.ai_addr Memo "addr-sin-family: ", Ai_FamilyToString((@pAi_Addr_In.sin_family)) Memo "addr-sin-port: ", FORMAT$(@pAi_Addr_In.sin_port) Memo "addr-sin-addr: ", ipDwordToDot(@pAi_Addr_In.sin_addr.s_addr) Memo "addr-sin-zero: ", (@pAi_Addr_In.sin_zero) ELSE Memo "addr-sa-family: ", Ai_FamilyToString((@pAi_Addr.sa_family)) Memo "addr-sa-data: ", (@pAi_Addr.sa_data) END IF Memo "next addr info: ", HEX$(@pRes.ai_next) pRes = @pRes.ai_next LOOP UNTIL pRes = 0 END IF FreeAddrInfo pResFirst MessageBox %HWND_DESKTOP, BYCOPY Memo("", ""), BYCOPY "GetAddrInfo", %MB_ICONINFORMATION OR %MB_OK END FUNCTION '______________________________________________________________________________ '
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Comment