Sockets Library Functions inet(3SOCKET)
NAME
inet, inet6, inetntop, inetpton, inetaton, inetaddr,
inetnetwork, inetmakeaddr, inetlnaof, inetnetof,
inetntoa - Internet address manipulation
SYNOPSIS
cc [ flag... ] file... -lsocket -lnsl [ library... ]
#include
#include
#include
#include
const char *inetntop(int af, const void *addr, char *cp,
sizet size);
int inetpton(int af, const char *cp, void *addr);
int inetaton(const char *cp, struct inaddr *addr);
inaddrt inetaddr(const char *cp);
inaddrt inetnetwork(const char *cp);
struct inaddr inetmakeaddr(const int net, const int lna);
int inetlnaof(const struct inaddr in);
int inetnetof(const struct inaddr in);
char *inetntoa(const struct inaddr in);
DESCRIPTION
The inetntop() and inetpton() functions can manipulate
both IPv4 and IPv6 addresses. The inetaton(), inetaddr(),
inetnetwork(), inetmakeaddr(), inetlnaof(),
inetnetof(), and inetntoa() functions can only manipulate
IPv4 addresses.
The inetntop() function converts a numeric address into a
string suitable for presentation. The af argument specifies
the family of the address which can be AFINET or AFINET6.
The addr argument points to a buffer that holds an IPv4
SunOS 5.11 Last change: 28 Nov 2007 1
Sockets Library Functions inet(3SOCKET)
address if the af argument is AFINET. The addr argument
points to a buffer that holds an IPv6 address if the af
argument is AFINET6. The address must be in network byte
order. The cp argument points to a buffer where the function
stores the resulting string. The application must specify a
non-NUL cp argument. The size argument specifies the size
of this buffer. For IPv6 addresses, the buffer must be at
least 46-octets. For IPv4 addresses, the buffer must be at
least 16-octets. To allow applications to easily declare
buffers of the proper size to store IPv4 and IPv6 addresses
in string form, the following two constants are defined in
:
#define INETADRSTRLEN 16
#define INET6ADRSTRLEN 46
The inetpton() function converts the standard text presen-
tation form of a function to the numeric binary form. The af
argument specifies the family of the address. Currently, the
AFINET and AFINET6 address families are supported. The cp
argument points to the string being passed in. The addr
argument points to a buffer where the function stores the
numeric address. The calling application must ensure that
the buffer referred to by addr is large enough to hold the
numeric address, at least 4 bytes for AFINET or 16 bytes
for AFINET6.
The inetaton(), inetaddr(), and inetnetwork() functions
interpret character strings that represent numbers expressed
in the IPv4 standard '.' notation, returning numbers suit-
able for use as IPv4 addresses and IPv4 network numbers,
respectively. The inetmakeaddr() function uses an IPv4 net-
work number and a local network address to construct an IPv4
address. The inetnetof() and inetlnaof() functions break
apart IPv4 host addresses, then return the network number
and local network address, respectively.
The inetntoa() function returns a pointer to a string in
the base 256 notation d.d.d.d. See the following section on
IPv4 addresses.
Internet addresses are returned in network order, bytes
ordered from left to right. Network numbers and local
address parts are returned as machine format integer values.
IPv6 Addresses
SunOS 5.11 Last change: 28 Nov 2007 2
Sockets Library Functions inet(3SOCKET)
There are three conventional forms for representing IPv6
addresses as strings:
1. The preferred form is x:x:x:x:x:x:x:x, where the
'x's are the hexadecimal values of the eight 16-bit
pieces of the address. For example:
1080:0:0:0:8:800:200C:417A
It is not necessary to write the leading zeros in
an individual field. There must be at least one
numeral in every field, except when the special
syntax described in the following is used.
2. It is common for addresses to contain long strings
of zero bits in some methods used to allocate cer-
tain IPv6 address styles. A special syntax is
available to compress the zeros. The use of "::"
indicates multiple groups of 16 bits of zeros. The
:: may only appear once in an address. The :: can
also be used to compress the leading and trailing
zeros in an address. For example:
1080::8:800:200C:417A
3. The alternative form x:x:x:x:x:x:d.d.d.d is some-
times more convenient when dealing with a mixed
environment of IPv4 and IPv6 nodes. The x's in this
form represent the hexadecimal values of the six
high-order 16-bit pieces of the address. The d's
represent the decimal values of the four low-order
8-bit pieces of the standard IPv4 address. For
example:
::F:129.144.52.38
::129.144.52.38
The ::F:d.d.d.d and ::d.d.d.d pieces are the
general forms of an IPv4-mapped IPv6 address and an
IPv4-compatible IPv6 address.
The IPv4 portion must be in the d.d.d.d form. The
following forms are invalid:
::F:d.d.d
::F:d.d
::d.d.d
::d.d
The ::F:d form is a valid but unconventional
representation of the IPv4-compatible IPv6 address
SunOS 5.11 Last change: 28 Nov 2007 3
Sockets Library Functions inet(3SOCKET)
::255.255.0.d.
The ::d form corresponds to the general IPv6
address 0:0:0:0:0:0:0:d.
IPv4 Addresses
Values specified using `.' notation take one of the follow-
ing forms:
d.d.d.d
d.d.d
d.d
d
When four parts are specified, each part is interpreted as a
byte of data and assigned from left to right to the four
bytes of an IPv4 address.
When a three-part address is specified, the last part is
interpreted as a 16-bit quantity and placed in the right
most two bytes of the network address. The three part
address format is convenient for specifying Class B network
addresses such as 128.net.host.
When a two-part address is supplied, the last part is inter-
preted as a 24-bit quantity and placed in the right most
three bytes of the network address. The two part address
format is convenient for specifying Class A network
addresses such as net.host.
When only one part is given, the value is stored directly in
the network address without any byte rearrangement.
With the exception of inetpton(), numbers supplied as parts
in '.' notation may be decimal, octal, or hexadecimal, as
specified in C language. For example, a leading 0x or 0X
implies hexadecimal. A leading 0 implies octal. Otherwise,
the number is interpreted as decimal.
For IPv4 addresses, inetpton() accepts only a string in
standard IPv4 dot notation:
d.d.d.d
SunOS 5.11 Last change: 28 Nov 2007 4
Sockets Library Functions inet(3SOCKET)
Each number has one to three digits with a decimal value
between 0 and 255.
The inetaddr() function has been obsoleted by inetaton().
RETURN VALUES
The inetaton() function returns nonzero if the address is
valid, 0 if the address is invalid.
The inetntop() function returns a pointer to the buffer
that contains a string if the conversion succeeds. Other-
wise, NUL is returned. Upon failure, errno is set to EAF-
NOSUPORT if the af argument is invalid or ENOSPC if the
size of the result buffer is inadequate.
The inetpton() function returns 1 if the conversion
succeeds, 0 if the input is not a valid IPv4 dotted-decimal
string or a valid IPv6 address string. The function returns
-1 with errno set to EAFNOSUPORT if the af argument is
unknown.
The value INADRNONE, which is equivalent to (inaddrt)(-
1), is returned by inetaddr() and inetnetwork() for mal-
formed requests.
The functions inetnetof() and inetlnaof() break apart IPv4
host addresses, returning the network number and local net-
work address part, respectively.
The function inetntoa() returns a pointer to a string in
the base 256 notation d.d.d.d, described in the section on
IPv4 addresses.
ATRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
SunOS 5.11 Last change: 28 Nov 2007 5
Sockets Library Functions inet(3SOCKET)
ATRIBUTE TYPE ATRIBUTE VALUE
Interface Stability See below.
MT-Level Safe
The inetntop(), inetpton(), inetaton(), inetaddr(), and
inetnetwork() functions are Committed. The inetlnaof(),
inetmakeaddr(), inetnetof(), and inetnetwork() functions
are Committed (Obsolete).
SEE ALSO
gethostbyname(3NSL), getipnodebyname(3SOCKET),
getnetbyname(3SOCKET), inet.h(3HEAD), hosts(4), networks(4),
attributes(5)
NOTES
The return value from inetntoa() points to a buffer which
is overwritten on each call. This buffer is implemented as
thread-specific data in multithreaded applications.
IPv4-mapped addresses are not recommended.
BUGS
The problem of host byte ordering versus network byte order-
ing is confusing. A simple way to specify Class C network
addresses in a manner similar to that for Class B and Class
A is needed.
SunOS 5.11 Last change: 28 Nov 2007 6
|