Comtrol eCos User Manual

Page 514

Advertising
background image

Chapter 38. TCP/IP Library Reference

only IPv4 and not IPv6, then the ai_family member of the hints structure

should be set to PF_INET when getaddrinfo() is called.

If the third

argument to getaddrinfo() is a null pointer, this is the same as if the

caller had filled in an addrinfo structure initialized to zero with

ai_family set to PF_UNSPEC.

Upon successful return a pointer to a linked list of one or more addrinfo

structures is returned through the final argument.

The caller can pro-

cess each addrinfo structure in this list by following the ai_next

pointer, until a null pointer is encountered.

In each returned addrinfo

structure the three members ai_family, ai_socktype, and ai_protocol are

the corresponding arguments for a call to the socket() function.

In each

addrinfo structure the ai_addr member points to a filled-in socket

address structure whose length is specified by the ai_addrlen member.

If the AI_PASSIVE bit is set in the ai_flags member of the hints struc-

ture, then the caller plans to use the returned socket address structure

in a call to bind().

In this case, if the nodename argument is a null

pointer, then the IP address portion of the socket address structure will

be set to INADDR_ANY for an IPv4 address or IN6ADDR_ANY_INIT for an IPv6

address.

If the AI_PASSIVE bit is not set in the ai_flags member of the hints

structure, then the returned socket address structure will be ready for a

call to connect() (for a connection-oriented protocol) or either

connect(), sendto(), or sendmsg() (for a connectionless protocol).

In

this case, if the nodename argument is a null pointer, then the IP

address portion of the socket address structure will be set to the loop-

back address.

If the AI_CANONNAME bit is set in the ai_flags member of the hints struc-

ture, then upon successful return the ai_canonname member of the first

addrinfo structure in the linked list will point to a NUL-terminated

string containing the canonical name of the specified nodename.

If the AI_NUMERICHOST bit is set in the ai_flags member of the hints

structure, then a non-null nodename string must be a numeric host address

string.

Otherwise an error of EAI_NONAME is returned.

This flag pre-

vents any type of name resolution service (e.g., the DNS) from being

called.

The arguments to getaddrinfo() must sufficiently be consistent and unam-

biguous.

Here are pitfall cases you may encounter:

o

getaddrinfo() will raise an error if members of the hints structure

are not consistent.

For example, for internet address families,

getaddrinfo() will raise an error if you specify SOCK_STREAM to

ai_socktype while you specify IPPROTO_UDP to ai_protocol.

o

If you specify a servname which is defined only for certain

ai_socktype, getaddrinfo() will raise an error because the arguments

are not consistent.

For example, getaddrinfo() will raise an error

if you ask for “tftp” service on SOCK_STREAM.

o

For internet address families, if you specify servname while you set

410

Advertising