INET(3)

๐Ÿ“ฆ
version 15.1 ยท 2 versions
, in freebsd 15.1

okay bestie, welcome to INET(3) from the Library Functions Manual โ€” the Internet address manipulation glow-up page. โœจ

๐Ÿ’– NAME ๐Ÿ’–

inet_aton, inet_addr, inet_network, inet_ntoa, inet_ntoa_r, inet_ntop, inet_pton, inet_makeaddr, inet_lnaof, inet_netof โ€” literally the Internet address manipulation routines. ๐Ÿ‘‘

๐Ÿ“š LIBRARY ๐Ÿ“š

Standard C Library (libc, -lc) โ€” thatโ€™s the vibe. ๐Ÿซถ

๐Ÿงš SYNOPSIS ๐Ÿงš

bestie, here are the exact spellings, no cap:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int
inet_aton(const char *cp, struct in_addr *pin);

in_addr_t
inet_addr(const char *cp);

in_addr_t
inet_network(const char *cp);

char *
inet_ntoa(struct in_addr in);

char *
inet_ntoa_r(struct in_addr in, char *buf, socklen_t size);

const char *
inet_ntop(int af, const void * restrict src, char * restrict dst,
    socklen_t size);

int
inet_pton(int af, const char * restrict src, void * restrict dst);

struct in_addr
inet_makeaddr(in_addr_t net, in_addr_t lna);

in_addr_t
inet_lnaof(struct in_addr in);

in_addr_t
inet_netof(struct in_addr in);

๐ŸŒธ DESCRIPTION ๐ŸŒธ

Okay so inet_aton(), inet_addr(), and inet_network() interpret character strings representing numbers expressed in the Internet standard โ€˜.โ€™ notation. ๐Ÿ’…

inet_pton() converts a presentation format address (that is, printable form as held in a character string) to network format (usually a struct in_addr or some other internal binary representation, in network byte order). It returns 1 if the address was valid for the specified address family, or 0 if the address was not parseable in the specified address family, or -1 if some system error occurred (in which case errno will have been set). This function is presently valid for AF_INET and AF_INET6. โœจ

inet_aton() interprets the specified character string as an Internet address, placing the address into the structure provided. It returns 1 if the string was successfully interpreted, or 0 if the string is invalid. inet_addr() and inet_network() return numbers suitable for use as Internet addresses and Internet network numbers, respectively. ๐Ÿ”ฅ

inet_ntop() converts an address *src from network format (usually a struct in_addr or some other binary form, in network byte order) to presentation format (suitable for external display purposes). The size argument specifies the size, in bytes, of the buffer *dst. INET_ADDRSTRLEN and INET6_ADDRSTRLEN define the maximum size required to convert an address of the respective type. It returns NULL if a system error occurs (in which case, errno will have been set), or it returns a pointer to the destination string. This function is presently valid for AF_INET and AF_INET6. ๐Ÿ’–

inet_ntoa() takes an Internet address and returns an ASCII string representing the address in โ€˜.โ€™ notation. inet_ntoa_r() is the reentrant version of inet_ntoa(). The deprecated routine inet_makeaddr() takes an Internet network number and a local host address on that network, and constructs an Internet address from it. It should only be assumed to work for historical class A/B/C networks. The deprecated routines inet_netof() and inet_lnaof() break apart Internet host addresses, returning the network number and local host address part, respectively, assuming the historical class A/B/C network masks. ๐Ÿšจ

๐Ÿšจ deprecated alert: inet_makeaddr(), inet_netof(), and inet_lnaof() are the old-school crew. The page says they are deprecated, and inet_makeaddr() should only be assumed to work for historical class A/B/C networks.

All Internet addresses are returned in network order (bytes ordered from left to right). All network numbers and local address parts are returned as machine byte order integer values. ๐ŸŒ€

๐ŸŒ INTERNET ADDRESSES (IP VERSION 4) ๐ŸŒ

inet_aton() and inet_addr() accept IPv4 values specified using the โ€˜.โ€™ notation in one of the following forms:

a.b.c.d
a.b.c
a.b
a

When four parts are specified, each is interpreted as a byte of data and assigned, from left to right, to the four bytes of an Internet address. ๐Ÿ“

When a three part address is specified, the last part is interpreted as a 16-bit quantity and placed in the least significant two bytes of the network address. ๐Ÿ’ซ

When a two part address is supplied, the last part is interpreted as a 24-bit quantity and placed in the least significant three bytes of the network address. ๐ŸŽ€

When only one part is given, the value is stored directly in the network address without any byte rearrangement. ๐Ÿฆ‹

All numbers supplied as โ€œpartsโ€ in a โ€˜.โ€™ notation may be decimal, octal, or hexadecimal, as specified in the C language (i.e., a leading 0x or 0X implies hexadecimal; otherwise, a leading 0 implies octal; otherwise, the number is interpreted as decimal). ๐Ÿ”ข

Note that inet_pton() does not accept 1-, 2-, or 3-part dotted addresses; all four parts must be specified and are interpreted only as decimal values. This is a narrower input set than that accepted by inet_aton(). ๐Ÿ‘€

๐Ÿฉบ DIAGNOSTICS ๐Ÿฉบ

The constant INADDR_NONE is returned by inet_addr() and inet_network() for malformed requests. ๐Ÿ’€

๐Ÿ˜ฑ ERRORS ๐Ÿ˜ฑ

The inet_ntop() call fails if:

  • [ENOSPC] โ€” size was not large enough to store the presentation form of the address. ๐Ÿซ 
  • [EAFNOSUPPORT] โ€” *src was not an AF_INET or AF_INET6 family address. ๐Ÿšซ

๐Ÿ”— SEE ALSO ๐Ÿ”—

๐Ÿ“ STANDARDS ๐Ÿ“

The inet_ntop() and inet_pton() functions conform to X/Open Networking Services Issue 5.2 (โ€œXNS5.2โ€). โœ…

๐Ÿ•ฐ๏ธ HISTORY ๐Ÿ•ฐ๏ธ

These functions appeared in 4.2BSD. ๐Ÿ‘‘

๐Ÿ’€ BUGS ๐Ÿ’€

The value INADDR_NONE (0xffffffff) is a valid broadcast address, but inet_addr() cannot return that value without indicating failure. The newer inet_aton() function does not share this problem. The problem of host byte ordering versus network byte ordering is confusing. The string returned by inet_ntoa() resides in a static memory area. ๐Ÿ˜ญ

The inet_addr() function should return a struct in_addr. ๐Ÿ™ˆ

mwah ๐Ÿ’– thatโ€™s the INET(3) tea. This page is from Debian, dated November 9, 2021. ๐ŸŽ€

๐Ÿ“ฆ where this page comes from
  • freebsd 15.1: base 15.1
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms