%SS2_GETADDRINFO

Get the IP address corresponding to a host name

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
status = %SS2_GETADDRINFO(h_name, in_addr6)

Return value

status

If successful, returns SS_SUCCESS (0). If unsuccessful, returns SS_ENULL (2). See the Socket Errors table for additional information about this error. (n)

Arguments

h_name

Specifies the host name. (a)

in_addr6

Returned with the IPv4 or IPv6 address(es). ([#][#]byte)

Discussion

%SS2_GETADDRINFO retrieves an IP address using the host name in h_name as a search parameter. Since the in_addr6 argument is a dynamic array (of a dynamic array of bytes), it will create as many arrays as needed and fill them with all of the IP addresses associated with the host name.

This function supports both IPv4 and IPv6 formatted IP addresses. When retrieving addresses from the byte array, you can tell whether they are IPv4 format or IPv6 format by the length: IPv4 will be 4 and IPv6 will be 16. See the example below.

If SS_ENULL is returned, the system error code can be returned by immediately calling %SYSERR.

Note

Do not use %SS2_GETADDRINFO to resolve IP address strings—it should be used only when the known value is the host name. To resolve an IP address string, use %SS2_INET_PTON to convert the string to a numeric IP address. If you want to get the host name, you can then use %SS2_GETNAMEINFO to retrieve that value.

Examples

This example shows how to get an array of IP addresses associated with www.mywebsite.com and loop through them to extract the IPv4 and IPv6 addresses for processing.

record
    status       ,i4
    addrArray,   ,[#][#]byte
    numEntries   ,i4
    len          ,i4
    i            ,i4
proc
    status = %ss2_getaddrinfo("www.mywebsite.com", addrArray)
    numEntries=addrArray.length        ; get number of entries in array
    for i=1 step 1 until numEntries do ; loop through the entries
      begin
        len = addrArray[i].length      ; get the length of each address
        if len = 4 then                ; IPv4 addresses
        ; do some processing here
        else if len = 16               ; IPv6 addresses
        ;do some different processing here
      end