z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


GETADDRINFO

z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
SC27-3660-00

The GETADDRINFO macro translates either the name of a service location (for example, a host name), a service name, or both, and returns a set of socket addresses and associated information to be used in creating a socket with which to address the specified service or sending a datagram to the specified service.

The following requirements apply to this call:
Read syntax diagramSkip visual syntax diagram
>>-EZASMI--TYPE=GETADDRINFO--+-----------------------+---------->
                             '-NODE--=--+-address--+-'   
                                        +-*indaddr-+     
                                        '-(reg)----'     

>--+--------------------------+--+--------------------------+--->
   '-NODELEN--=--+-number---+-'  '-SERVICE--=--+-address--+-'   
                 +-address--+                  +-*indaddr-+     
                 +-*indaddr-+                  '-(reg)----'     
                 '-(reg)----'                                   

>--+--------------------------+--+------------------------+----->
   '-SERVLEN--=--+-number---+-'  '-HINTS--=--+-address--+-'   
                 +-address--+                +-*indaddr-+     
                 +-*indaddr-+                '-(reg)----'     
                 '-(reg)----'                                 

>--RES--=--+-address--+--+--------------------------+----------->
           +-*indaddr-+  '-CANNLEN--=--+-address--+-'   
           '-(reg)----'                +-*indaddr-+     
                                       '-(reg)----'     

>--,ERRNO--=--+-address--+--,RETCODE--=--+-address--+----------->
              +-*indaddr-+               +-*indaddr-+   
              '-(reg)----'               '-(reg)----'   

>--+-------------------------+---------------------------------><
   '-,ERROR--=--+-address--+-'   
                +-*indaddr-+     
                '-(reg)----'     

Keyword
Description
NODE
An input parameter. Storage up to 255 bytes long that contains the host name being queried. If the AI_NUMERICHOST flag is specified in the storage pointed to by the HINTS operand, then NODE should contain the queried host's IP address in network byte order presentation form. This is an optional field, but if specified you must also code NODELEN. The NODE name being queried consists of up to NODELEN or up to the first binary zero.

You can append scope information to the host name by using the format node%scope information. The combined information must be 255 bytes or less. For more information, see z/OS Communications Server: IPv6 Network and Application Design Guide.

NODELEN
An input parameter. A fullword binary field set to the length of the host name specified in the NODE field and should not include extraneous blanks. This is an optional field, but if specified you must also code NODE.
SERVICE
An input parameter. Storage up to 32 bytes long that contains the service name being queried. If the AI_NUMERICSERV flag is specified in the storage pointed to by the HINTS operand, then SERVICE should contain the queried port number in presentation form. This is an optional field, but if specified you must also code SERVLEN. The SERVICE name being queried consists of up to SERVLEN or up to the first binary zero.
SERVLEN
An input parameter. A fullword binary field set to the length of the service name specified in the SERVICE field and should not include extraneous blanks. This is an optional field but if specified you must also code SERVICE.
HINTS
An input parameter. If the HINTS argument is specified, then it contains the address of an addrinfo structure containing input values that can direct the operation by providing options and limiting the returned information to a specific socket type, address family, or protocol. If the HINTS argument is not specified, then the information returned is as if it referred to a structure containing the value 0 for the FLAGS, SOCTYPE and PROTO fields, and AF_UNSPEC for the AF field. Include the EZBREHST Resolver macro to enable your program to contain the assembler mappings for the ADDR_INFO structure.

This is an optional field.

The address information structure has the following fields:

Field
Description
FLAGS
A fullword binary field. Must have the value of 0 or the bitwise OR of one or more of the following values:
AI_PASSIVE (X'00000001')
  • Specifies how to specify the NAME pointed to in the returned RES. If this flag is specified, then the returned address information is suitable for use in binding a socket for accepting incoming connections for the specified service (that is the TYPE=BIND call). In this case, if the NODE argument is not specified, then the IP address portion of the socket address structure pointed to by the returned RES is set to INADDR_ANY for an IPv4 address or to the IPv6 unspecified address (in6addr_any) for an IPv6 address.
  • If this flag is not set, the returned address information is suitable for the TYPE=CONNECT call (for a connection-mode protocol) or for a TYPE=CONNECT, TYPE=SENDTO, or TYPE=SENDMSG call (for a connectionless protocol). In this case, if the NODE argument is not specified, then the IP address portion of the socket address structure pointed to by the returned RES is set to the default loopback address for an IPv4 address (127.0.0.0) or the default loopback address for an IPv6 address (::1).
  • This flag is ignored if the NODE argument is specified.
AI_CANONNAMEOK (X'00000002')
  • If this flag is specified and the NODE argument is specified, then the TYPE=GETADDRINFO call attempts to determine the canonical name corresponding to the NODE argument.
AI_NUMERICHOST (X'00000004')
  • If this flag is specified then the NODE argument must be a numeric host address in presentation form. Otherwise, an error of host not found [EAI_NONAME] is returned.
AI_NUMERICSERV (X'00000008')
  • If this flag is specified then the SERVICE argument must be a numeric port in presentation form. Otherwise, an error [EAI_NONAME] is returned.
AI_V4MAPPED (X'00000010')
  • If this flag is specified along with the AF field with the value of AF_INET6, or a value of AF_UNSPEC when IPv6 is supported on the system, then the caller accepts IPv4-mapped IPv6 addresses. When the AI_ALL flag is not also specified and no IPv6 addresses are found, then a query is made for IPv4 addresses. If any IPv4 addresses are found, they are returned as IPv4-mapped IPv6 addresses.
  • If the AF field does not have the value of AF_INET6 or the AF field contains AF_UNSPEC but IPv6 is not supported on the system, this flag is ignored.
AI_ALL (X'00000020')
  • When the AF field has a value of AF_INET6 and AI_ALL is set, the AI_V4MAPPED flag must also be set to indicate that the caller accepts all addresses (IPv6 and IPv4-mapped IPv6 addresses). When the AF field has a value of AF_UNSPEC when the system supports IPv6 and AI_ALL is set, the caller accepts IPv6 addresses and either IPv4 (if AI_V4MAPPED is not set) or IPv4-mapped IPv6 (if AI_V4MAPPED is set) addresses. A query is first made for IPv6 addresses and if successful, the IPv6 addresses are returned. Another query is then made for IPv4 addresses and any found are returned as IPv4 addresses (if AI_V4MAPPED was not set) or as IPv4-mapped IPv6 addresses (if AI_V4MAPPED was set).
  • If the AF field does not have the value of AF_INET6, or the value of AF_UNSPEC when the system supports IPv6, the flag is ignored.
AI_ADDRCONFIG (X'00000040')
If this flag is specified, then a query for IPv6 on the NODE will occur if the Resolver determines whether either of the following conditions is true:
  • If the system is IPv6 enabled and has at least one IPv6 interface, the Resolver makes a query for IPv6 (AAAA or A6 DNS) records.
  • If the system is IPv4 enabled and has at least one IPv4 interface, the Resolver makes a query for IPv4 (A DNS) records.
The loopback address is not considered in this case as a valid interface.
AI_EXTFLAGS (X'00000080') or a decimal value of 128
Requests the extended form of the getaddrinfo function. The extended form allows for additional hints to be passed to the resolver for determining the order of destination addresses that is returned. If this flag is specified, the EFLAGS field is required.
AF
A fullword binary field. Used to limit the returned information to a specific address family. The value of AF_UNSPEC means that the caller accepts any protocol family. The value of a decimal 0 indicates AF_UNSPEC. The value of a decimal 2 indicates AF_INET, and the value of a decimal 19 indicates AF_INET6.
SOCTYPE

A fullword binary field. Used to limit the returned information to a specific socket type. A value of 0 means that the caller accepts any socket type. If a specific socket type is not given (for example, a value of 0), then information on all supported socket types is returned.

The following table shows the acceptable socket types:
Type name Decimal value Description
SOCK_STREAM 1 for stream socket
SOCK_DGRAM 2 for datagram socket
SOCK_RAW 3 for raw-protocol interface

Anything else will fail with return code EAI_SOCKTYPE. Note that although SOCK_RAW is accepted, it is valid only when SERVICE is numeric (for example, SERVICE=23). A lookup for a SERVICE name will never occur in the appropriate services file (for example, hlq.ETC.SERVICES) using any protocol value other than SOCK_STREAM or SOCK_DGRAM.

If PROTO is not 0 and SOCTYPE is 0, then the only acceptable input values for PROTO are IPPROTO_TCP and IPPROTO_UDP. Otherwise, the TYPE=GETADDRINFO fails with return code EAI_BADFLAGS.

If SOCTYPE and PROTO are both specified as 0 then TYPE=GETADDRINFO proceeds as follows:

  • If SERVICE is null, or if SERVICE is numeric, then any returned addrinfos defaults to a specification of SOCTYPE as SOCK_STREAM.
  • If SERVICE is specified as a service name (for example, SERVICE=FTP), then TYPE=GETADDRINFO searches the appropriate services file (such as, hlq.ETC.SERVICES) twice. The first search uses SOCK_STREAM as the protocol, and the second search uses SOCK_DGRAM as the protocol. No default socket type is provided in this case.
If both SOCTYPE and PROTO are specified as a value other than 0 then they should be compatible, regardless of the value specified by SERVICE. In this context, compatible can have one of the following meanings:
  • SOCTYPE=SOCK_STREAM and PROTO=IPPROTO_TCP
  • SOCTYPE=SOCK_DGRAM and PROTO=IPPROTO_UDP
  • SOCTYPE=SOCK_RAW and PROTO can be anything
PROTO
A fullword binary field. Used to limit the returned information to a specific protocol. A value of 0 means that the caller accepts any protocol.

The following table shows the acceptable protocols:

Protocol name Decimal value Description
IPPROTO_TCP 6 TCP
IPPROTO_UDP 17 user datagram

If SOCKTYPE is 0 and PROTO is not 0, then the only acceptable input values for PROTO are IPPROTO_TCP and IPPROTO_UDP. Otherwise, the TYPE=GETADDRINFO is failed with return code EAI_BADFLAGS.

If PROTO and SOCKTYPE are both specified as 0, then TYPE=GETADDRINFO proceeds as follows:

  • If SERVICE is null, or if SERVICE is numeric, then any returned addrinfos default to a specification of SOCKTYPE as SOCK_STREAM.
  • If SERVICE is specified as a service name (for example, SERVICE=FTP), then TYPE=GETADDRINFO searches the appropriate services file (such as, hlq.ETC.SERVICES) twice. The first search uses SOCK_STREAM as the protocol, and the second search uses SOCK_DGRAM as the protocol. No default socket type is provided in this case.
If both PROTO and SOCKTYPE are specified as nonzero, then they should be compatible, regardless of the value specified by SERVICE. In this context, compatible can have one of the following meanings:
  • SOCTYPE=SOCK_STREAM and PROTO=IPPROTO_TCP
  • SOCTYPE=SOC_DGRAM and PROTO=IPPROTO_UDP
  • SOCTYPE=SOCK_RAW and PROTO can be anything

If the lookup for the value specified in SERVICE fails [that is, the service name does not appear in the appropriate services file (for example, hlq.ETC.SERVICES) using the input protocol], then the TYPE=GETADDRINFO fails with return code EAI_SERVICE.

NAMELEN
A fullword binary field followed by 8 padding bytes. This field must be 0.
CANONNAME
A fullword binary field followed by 4 padding bytes. This field must be 0.
NAME
A fullword binary field followed by 4 padding bytes. This field must be 0.
NEXT
A fullword binary field. This field must be 0.
EFLAGS
A fullword binary field that specifies the source IPv6 address selection preferences. This field is required if AI_EXTFLAGS is specified in the FLAGS field.
This field must contain the value 0 or the bitwise OR of one or more of the following values:
IPV6_PREFER_SRC_HOME (X'00000001') or the decimal value 1
Indicates that home source IPv6 addresses are preferred over care-of source IPv6 addresses.
IPV6_PREFER_SRC_COA (X'00000002') or the decimal value 2
Indicates that care-of source IPv6 addresses are preferred over home source IPv6 addresses.
IPV6_PREFER_SRC_TMP (X'00000004') or the decimal value 4
Indicates that temporary source IPv6 addresses are preferred over public source IPv6 addresses.
IPV6_PREFER_SRC_PUBLIC (X'00000008') or the decimal value 8
Indicates that public source IPv6 addresses are preferred over temporary source IPv6 addresses.
IPV6_PREFER_SRC_CGA (X'00000010') or the decimal value 16
Indicates that cryptographically generated source IPv6 addresses are preferred over non-cryptographically generated source IPv6 addresses.
IPV6_PREFER_SRC_NONCGA (X'00000020') or the decimal value 32
Indicates that non-cryptographically generated source IPv6 addresses are preferred over cryptographically generated source IPv6 addresses.
If contradictory EFLAGS (for example, IPV6_PREFER_SRC_TMP and IPV6_PREFER_SRC_PUBLIC) or invalid EFLAGS (for example, X'00000040' or a decimal value 64) are specified, then the GETADDRINFO call fails with RETCODE -1 and ERRNO EAI_BADEXTFLAGS (decimal value 11).
RES

Initially a fullword binary field. On a successful return, this field contains a pointer to a chain of one or more address information structures. Use the EZBREHST macro to establish address information mapping. The structures are allocated in the key of the calling application. The structures that are returned by a TYPE=GETADDRINFO call are serially reusable storage for the z/OS® UNIX process. They can be used or referenced between process threads, but should not be used or referenced between processes. When you finish using the structures, explicitly release their storage by specifying the returned pointer on a TYPE=FREEADDRINFO call.

The address information structure contains the following fields. All fields in this structure that are not specified with an explicit value are set to 0:

Field
Description
FLAGS
A fullword binary field that is not used as output.
AF
A fullword binary field. The value returned in this field can be used as the AF= argument on the TYPE=SOCKET macro to create a socket suitable for use with the returned address NAME.
SOCTYPE
A fullword binary field. The value returned in this field can be used as the SOCTYPE= argument on the TYPE=SOCKET macro to create a socket suitable for use with the returned address NAME.
PROTO
A fullword binary field. The value returned in this field can be used as the PROTO= argument on the TYPE=SOCKET macro to create a socket suitable for use with the returned address NAME.
NAMELEN
A fullword binary field followed by 8 padding bytes. The length of the NAME socket address structure. The value returned in this field can be used as the arguments for the TYPE=CONNECT or TYPE=BIND macros with such a socket, according to the AI_PASSIVE flag.
CANONNAME
A fullword binary field followed by 4 padding bytes. The address of storage containing the canonical name for the value specified by NODE. Initially, this field must be 0. If the NODE argument is specified, and if the AI_CANONNAMEOK flag was specified by the HINTS argument, then the CANONNAME field in the first returned address information structure contains the address of storage containing the canonical name corresponding to the input NODE argument. If the canonical name is not available, then the CANONNAME field refers to the NODE argument or a string with the same contents. The CANNLEN field contains the length of the returned canonical name.
NAME
A fullword binary field followed by 4 padding bytes. The address of the returned socket address structure. The value returned in this field can be used as the arguments for the TYPE=CONNECT or TYPE=BIND macros with such a socket, according to the AI_PASSIVE flag.
NEXT
A fullword binary field. Contains the address of the next address information structure on the list, or 0's if it is the last structure on the list.
EFLAGS
A fullword binary field that is not used as output.
CANNLEN
Initially an input parameter. A fullword binary field used to contain the length of the canonical name returned by the RES CANONNAME field. This is an optional field.
ERRNO
Output parameter. A fullword binary field. If RETCODE is negative, ERRNO contains a valid error number. Otherwise, ignore the ERRNO field.

See Socket call error return codes for information about ERRNO return codes.

RETCODE
Output parameter. A fullword binary field that returns one of the following values:
Value
Description
0
Successful call.
-1
Check ERRNO for an error code.
ERROR
Input parameter. The location in your program to receive control when the application programming interface (API) processing module cannot be loaded.

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014