Info Node: (guile.info)Network Databases and Address Conversion
(guile.info)Network Databases and Address Conversion
Network Databases and Address Conversion
----------------------------------------
This section describes procedures which convert internet addresses and
query various network databases. Care should be taken when using the
database routines since they are not reentrant.
Address Conversion
..................
- primitive: inet-aton address
Converts a string containing an Internet host address in the
traditional dotted decimal notation into an integer.
(inet-aton "127.0.0.1") => 2130706433
- primitive: inet-ntoa inetid
Converts an integer Internet host address into a string with the
traditional dotted decimal representation.
(inet-ntoa 2130706433) => "127.0.0.1"
- primitive: inet-netof address
Returns the network number part of the given integer Internet
address.
(inet-netof 2130706433) => 127
- primitive: inet-lnaof address
Returns the local-address-with-network part of the given Internet
address.
(inet-lnaof 2130706433) => 1
- primitive: inet-makeaddr net lna
Makes an Internet host address by combining the network number NET
with the local-address-within-network number LNA.
(inet-makeaddr 127 1) => 2130706433
The Host Database
.................
A "host object" is a structure that represents what is known about a
network host, and is the usual way of representing a system's network
identity inside software.
The following functions accept a host object and return a selected
component:
- procedure: hostent:name host
The "official" hostname for HOST.
- procedure: hostent:aliases host
A list of aliases for HOST.
- procedure: hostent:addrtype host
The host address type. For hosts with Internet addresses, this
will return `AF_INET'.
- procedure: hostent:length host
The length of each address for HOST, in bytes.
- procedure: hostent:addr-list host
The list of network addresses associated with HOST.
The following procedures are used to search the host database:
- primitive: gethost [host]
- procedure: gethostbyname hostname
- procedure: gethostbyaddr address
Look up a host by name or address, returning a host object. The
`gethost' procedure will accept either a string name or an integer
address; if given no arguments, it behaves like `gethostent' (see
below). If a name or address is supplied but the address can not
be found, an error will be thrown to one of the keys:
`host-not-found', `try-again', `no-recovery' or `no-data',
corresponding to the equivalent `h_error' values. Unusual
conditions may result in errors thrown to the `system-error' or
`misc_error' keys.
The following procedures may be used to step through the host database
from beginning to end.
- procedure: sethostent [stayopen]
Initialize an internal stream from which host objects may be read.
This procedure must be called before any calls to `gethostent',
and may also be called afterward to reset the host entry stream.
If STAYOPEN is supplied and is not `#f', the database is not
closed by subsequent `gethostbyname' or `gethostbyaddr' calls,
possibly giving an efficiency gain.
- procedure: gethostent
Return the next host object from the host database, or `#f' if
there are no more hosts to be found (or an error has been
encountered). This procedure may not be used before `sethostent'
has been called.
- procedure: endhostent
Close the stream used by `gethostent'. The return value is
unspecified.
- primitive: sethost [stayopen]
If STAYOPEN is omitted, this is equivalent to `endhostent'.
Otherwise it is equivalent to `sethostent stayopen'.
The Network Database
....................
The following functions accept an object representing a network and
return a selected component:
- procedure: netent:name net
The "official" network name.
- procedure: netent:aliases net
A list of aliases for the network.
- procedure: netent:addrtype net
The type of the network number. Currently, this returns only
`AF_INET'.
- procedure: netent:net net
The network number.
The following procedures are used to search the network database:
- primitive: getnet [net]
- procedure: getnetbyname net-name
- procedure: getnetbyaddr net-number
Look up a network by name or net number in the network database.
The NET-NAME argument must be a string, and the NET-NUMBER
argument must be an integer. `getnet' will accept either type of
argument, behaving like `getnetent' (see below) if no arguments are
given.
The following procedures may be used to step through the network
database from beginning to end.
- procedure: setnetent [stayopen]
Initialize an internal stream from which network objects may be
read. This procedure must be called before any calls to
`getnetent', and may also be called afterward to reset the net
entry stream. If STAYOPEN is supplied and is not `#f', the
database is not closed by subsequent `getnetbyname' or
`getnetbyaddr' calls, possibly giving an efficiency gain.
- procedure: getnetent
Return the next entry from the network database.
- procedure: endnetent
Close the stream used by `getnetent'. The return value is
unspecified.
- primitive: setnet [stayopen]
If STAYOPEN is omitted, this is equivalent to `endnetent'.
Otherwise it is equivalent to `setnetent stayopen'.
The Protocol Database
.....................
The following functions accept an object representing a protocol and
return a selected component:
- procedure: protoent:name protocol
The "official" protocol name.
- procedure: protoent:aliases protocol
A list of aliases for the protocol.
- procedure: protoent:proto protocol
The protocol number.
The following procedures are used to search the protocol database:
- primitive: getproto [protocol]
- procedure: getprotobyname name
- procedure: getprotobynumber number
Look up a network protocol by name or by number. `getprotobyname'
takes a string argument, and `getprotobynumber' takes an integer
argument. `getproto' will accept either type, behaving like
`getprotoent' (see below) if no arguments are supplied.
The following procedures may be used to step through the protocol
database from beginning to end.
- procedure: setprotoent [stayopen]
Initialize an internal stream from which protocol objects may be
read. This procedure must be called before any calls to
`getprotoent', and may also be called afterward to reset the
protocol entry stream. If STAYOPEN is supplied and is not `#f',
the database is not closed by subsequent `getprotobyname' or
`getprotobynumber' calls, possibly giving an efficiency gain.
- procedure: getprotoent
Return the next entry from the protocol database.
- procedure: endprotoent
Close the stream used by `getprotoent'. The return value is
unspecified.
- primitive: setproto [stayopen]
If STAYOPEN is omitted, this is equivalent to `endprotoent'.
Otherwise it is equivalent to `setprotoent stayopen'.
The Service Database
....................
The following functions accept an object representing a service and
return a selected component:
- procedure: servent:name serv
The "official" name of the network service.
- procedure: servent:aliases serv
A list of aliases for the network service.
- procedure: servent:port serv
The Internet port used by the service.
- procedure: servent:proto serv
The protocol used by the service. A service may be listed many
times in the database under different protocol names.
The following procedures are used to search the service database:
- primitive: getserv [name [protocol]]
- procedure: getservbyname name protocol
- procedure: getservbyport port protocol
Look up a network service by name or by service number, and return
a network service object. The PROTOCOL argument specifies the name
of the desired protocol; if the protocol found in the network
service database does not match this name, a system error is
signalled.
The `getserv' procedure will take either a service name or number
as its first argument; if given no arguments, it behaves like
`getservent' (see below).
The following procedures may be used to step through the service
database from beginning to end.
- procedure: setservent [stayopen]
Initialize an internal stream from which service objects may be
read. This procedure must be called before any calls to
`getservent', and may also be called afterward to reset the
service entry stream. If STAYOPEN is supplied and is not `#f',
the database is not closed by subsequent `getservbyname' or
`getservbyport' calls, possibly giving an efficiency gain.
- procedure: getservent
Return the next entry from the services database.
- procedure: endservent
Close the stream used by `getservent'. The return value is
unspecified.
- primitive: setserv [stayopen]
If STAYOPEN is omitted, this is equivalent to `endservent'.
Otherwise it is equivalent to `setservent stayopen'.