3.3
|
The inet_aton and inet_addr
functions have traditionally been liberal in what they accept as a
dotted-decimal IPv4 address string: allowing from one to four
numbers separated by decimal points, and allowing a leading
0x to specify a hexadecimal number, or a leading 0 to
specify an octal number. (Try telnet 0xe to see this
behavior.) inet_pton is much stricter with IPv4 address
and requires exactly four numbers separated by three decimal
points, with each number being a decimal number between 0 and 255.
inet_pton does not allow a dotted-decimal number to be
specified when the address family is AF_INET6, although
one could argue that these should be allowed and the return value
should be the IPv4-mapped IPv6 address for the dotted-decimal
string (Figure A.10).
Write a new function named
inet_pton_loose that handles these scenarios: If the
address family is AF_INET and inet_pton returns
0, call inet_aton and see if it succeeds. Similarly, if
the address family is AF_INET6 and inet_pton
returns 0, call inet_aton and if it succeeds, return the
IPv4-mapped IPv6 address.
|