A conversão de uma string para um endereço geralmente é realizada pela função POSIX getaddrinfo() . Esta função primeiro verifica um endereço IP numérico usando inet_addr() , e se isso falhar, Em seguida, tente resolver a cadeia como um nome de domínio. inet_addr() interpreta números com 0 inicial como octal, portanto, por exemplo, 010 se tornaria 8 e 019 seriam um erro (e, portanto, seriam resolvidos como um nome de domínio). O mesmo comportamento ocorre no Linux e no Solaris também.
Em getaddrinfo() :
If the specified address family is AF_INET or AF_UNSPEC, address strings using Internet standard dot notation as specified in
inet_addr()are valid.
Em inet_addr() :
All numbers supplied as parts in IPv4 dotted decimal notation may be decimal, octal, or hexadecimal, as specified in the ISO C standard (that is, a leading 0x or 0X implies hexadecimal; otherwise, a leading '0' implies octal; otherwise, the number is interpreted as decimal).
Anote o endereço 192.168.8.254 entre parênteses:
$ ping 192.168.010.254
PING 192.168.010.254 (192.168.8.254): 56 data bytes
Request timeout for icmp_seq 0