### 16.13 Networks Database ¶

Many systems come with a database that records a list of networks known to the system developer. This is usually kept either in the file `/etc/networks` or in an equivalent from a name server. This data base is useful for routing programs such as `route`, but it is not useful for programs that simply communicate over the network. We provide functions to access this database, which are declared in `netdb.h`.

Data Type: struct netent ¶

  This data type is used to represent information about entries in the networks database. It has the following members:

  `char *n_name`

    This is the “official” name of the network.

  `char **n_aliases`

    These are alternative names for the network, represented as a vector of strings. A null pointer terminates the array.

  `int n_addrtype`

    This is the type of the network number; this is always equal to `AF_INET` for Internet networks.

  `unsigned long int n_net`

    This is the network number. Network numbers are returned in host byte order; see Byte Order Conversion.

Use the `getnetbyname` or `getnetbyaddr` functions to search the networks database for information about a specific network. The information is returned in a statically-allocated structure; you must copy the information if you need to save it.

Function: `struct netent *` getnetbyname `(const char *name)` ¶

  Preliminary: | MT-Unsafe race:netbyname env locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

  The `getnetbyname` function returns information about the network named name. It returns a null pointer if there is no such network.

Function: `struct netent *` getnetbyaddr `(uint32_t net, int type)` ¶

  Preliminary: | MT-Unsafe race:netbyaddr locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

  The `getnetbyaddr` function returns information about the network of type type with number net. You should specify a value of `AF_INET` for the type argument for Internet networks.

  `getnetbyaddr` returns a null pointer if there is no such network.

You can also scan the networks database using `setnetent`, `getnetent` and `endnetent`. Be careful when using these functions because they are not reentrant.

Function: `void` setnetent `(int stayopen)` ¶

  Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

  This function opens and rewinds the networks database.

  If the stayopen argument is nonzero, this sets a flag so that subsequent calls to `getnetbyname` or `getnetbyaddr` will not close the database (as they usually would). This makes for more efficiency if you call those functions several times, by avoiding reopening the database for each call.

Function: `struct netent *` getnetent `(void)` ¶

  Preliminary: | MT-Unsafe race:netent race:netentbuf env locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

  This function returns the next entry in the networks database. It returns a null pointer if there are no more entries.

Function: `void` endnetent `(void)` ¶

  Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | See POSIX Safety Concepts.

  This function closes the networks database.