67 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Groff
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Groff
		
	
	
		
			Executable File
		
	
	
	
	
| .TH GETADDRINFO 3  "January 19, 2010"
 | |
| .UC 4
 | |
| .SH NAME
 | |
| getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo \- address information
 | |
| .SH SYNOPSIS
 | |
| .nf
 | |
| .ft B
 | |
| #include <netdb.h>
 | |
| 
 | |
| void freeaddrinfo(struct addrinfo *\fIai\fP);
 | |
| int getaddrinfo(const char *\fInodename\fP,
 | |
|        const char *\fIservname\fP,
 | |
|        const struct addrinfo *\fIhints\fP,
 | |
|        struct addrinfo **\fIres\fP);
 | |
| int getnameinfo(const struct sockaddr *\fIsa\fP, socklen_t \fIsalen\fP,
 | |
|        char *\fInode\fP, socklen_t \fInodelen\fP, char *\fIservice\fP,
 | |
|        socklen_t \fIservicelen\fP, int \fIflags\fP);
 | |
| const char *gai_strerror(int \fIecode\fP);
 | |
| .fi
 | |
| .SH DESCRIPTION
 | |
| These functions provide to convert between host and service names on the one
 | |
| hand and network addresses and ports on the other. 
 | |
| .PP
 | |
| getaddrinfo converts the hostname specified in \fInodename\fP and/or the service
 | |
| name in \fIservname\fP into a socket address that can be used to connect to that
 | |
| service or listen for incoming connections. One of the parameters may be NULL. 
 | |
| If \fInodename\fP is NULL, an address for the local host is provided. If 
 | |
| \fIservname\fP is NULL, the network port is not filled in (and therefore set to 
 | |
| zero). Buffers are allocated to store the results and a pointer to the first 
 | |
| element of a linked list of addresses is stored in \fIai\fP. These buffers must
 | |
| be freed by calling freeaddrinfo on the pointer returned in \fIai\fP.
 | |
| .PP
 | |
| getnameinfo converts the specified socket address into a hostname and/or service
 | |
| name. These are stored in the buffers pointed to by \fInode\fP and \fIservice\fP
 | |
| resepectively. \fInodelen\fP and \fIservicelen\fP specify the sizes of these 
 | |
| buffers. If the result string including null terminator does not fit in the
 | |
| buffer, the function fails and EAI_OVERFLOW is returned.
 | |
| .PP
 | |
| For both functions, some flags may be specified to alter their behaviour. For
 | |
| getaddrinfo these flags are specified in the ai_flags field of the optional 
 | |
| \fIhints\fP parameter. AI_PASSIVE indicates that an address suitable for the 
 | |
| bind function should be returned, otherwise an address suitable for connect is 
 | |
| provided. AI_CANONNAME requests that the canonical name of the host be retrieved 
 | |
| and stored in the ai_canonname field of the result. AI_NUMERICHOST and 
 | |
| AI_NUMERICSERV indicate respectively that \fInodename\fP is an IP address and
 | |
| \fIservname\fP is a port number, avoiding a lookup. Search can be limited to a
 | |
| specific socket type by setting \fIhints\fP\->ai_socktype to SOCK_STREAM or 
 | |
| SOCK_DGRAM. \fIhints\fP\->ai_family can be set to AF_UNSPEC or AF_INET but this
 | |
| doesn't make a difference as MINIX supports only IPv4. Unused fields of 
 | |
| \fIhints\fP must be set to zero.
 | |
| .PP
 | |
| Flags for getnameinfo are specified in the \fIflags\fP parameter. NI_NUMERICHOST
 | |
| and NI_NUMERICSERV respectively cause \fInode\fP to be set to an IP address
 | |
| and \fIservice\fP to be set to a port number. NI_NAMEREQD causes the function
 | |
| to fail with EAI_NONAME if a name is not found for the host (otherwise the IP
 | |
| address is returned). NI_DGRAM indicates that a datagram service is specified,
 | |
| the default being a stream service.
 | |
| .SH "RETURN VALUE
 | |
| If the functions succeed, they return 0. If they fail, one of the EAI_* values
 | |
| defined in netdb.h is returned. This value can be converted into a string using
 | |
| gai_strerror. The most important ones are EAI_NONAME (host name not found), 
 | |
| EAI_SERVICE (service name not found) and EAI_OVERFLOW (buffer too small, only
 | |
| for getnameinfo).
 | |
| .SH "KNOWN ISSUES
 | |
| Since MINIX does not support IPv6, the related flags are not supported. 
 | |
| The NI_NOFQDN flag is also not (yet) supported. 
 | 
