Miscellaneous OS Facilities - MIT/GNU Scheme 7.7.91
Description: MIT/GNU Scheme 7.7.91

Previous: TCP Sockets, Up: Operating-System Interface

### 15.9 Miscellaneous OS Facilities

This section contains assorted operating-system facilities that don't fit into other categories.

— variable: microcode-id/operating-system
— variable: microcode-id/operating-system-name

> `microcode-id/operating-system` is bound to a symbol that specifies the type of operating system that Scheme is running under. There are three possible values: `unix`, `os/2`, or `nt`.

> `microcode-id/operating-system-name` is a string containing the same name as `microcode-id/operating-system`; the latter is created by interning the former as a symbol.

— variable: microcode-id/operating-system-variant

> This variable is a string that identifies the particular variant of the operating system that Scheme is running under. Here are some of the possible values:

>               "GNU/Linux"
>               "FreeBSD"
>               "HP-UX"
>               "SunOS"
>               "OS/2 2.1"
>               "OS/2 4.0"
>               "Microsoft Windows NT 4.0 (Build 1381; Service Pack 3)"
>               "Microsoft Windows 98 (Build 410)"

> For Windows systems, it is recommended that you match on the prefix of this string and ignore the `"Build"` suffix. This is because the suffix may contain information about service packs or fixes, while the prefix will be constant for a particular version of Windows.

The next few procedures provide access to the domain name service (DNS), which maintains associations between internet host names such as `"www.swiss.ai.mit.edu"` and IP addresses, such as `18.23.0.16`. In MIT/GNU Scheme, we represent an internet host name as a string, and an IP address as a byte vector of length 4 (byte vectors are just character strings that are accessed using `vector-8b-ref` rather than `string-ref`). The bytes in an IP address read in the same order as they do when written out:

         (get-host-by-name "www.swiss") => #("\022\027\000\020")

— procedure: get-host-by-name host-name

> Looks up the internet host name host-name using the DNS, returning a vector of IP addresses for the corresponding host, or `#f` if there is no such host. Usually the returned vector has only one element, but if a host has more than one network interface, the vector might have more than one element.

>               (get-host-by-name "www.swiss") => #("\022\027\000\020")

— procedure: get-host-by-address ip-address

> Does a reverse DNS lookup on ip-address, returning the internet host name corresponding to that address, or `#f` if there is no such host.

>               (get-host-by-address "\022\027\000\020") => "swissnet.ai.mit.edu"

— procedure: canonical-host-name host-name

> Finds the “canonical” internet host name for host-name. For example:

>               (canonical-host-name "zurich")    => "zurich.ai.mit.edu"
>               (canonical-host-name "www.swiss") => "swissnet.ai.mit.edu"

> In both examples, the default internet domain ai.mit.edu is added to host-name. In the second example, `"www.swiss"` is an alias for another computer named `"swissnet"`.

— procedure: get-host-name

> Returns the string that identifies the computer that MIT/GNU Scheme is running on. Usually this is an unqualified internet host name, i.e. the host name without the domain suffix:

>               (get-host-name) => "aarau"

— procedure: os/hostname

> Returns the canonical internet host name of the computer that MIT/GNU Scheme is running on. So, in contrast to the example for `get-host-name`:

>               (os/hostname) => "aarau.ai.mit.edu"

— procedure: allocate-host-address

> Allocates and returns an IP address object. This is just a string of a fixed length (current 4 bytes) into which an IP address may be stored. This procedure is used to generate an appropriate argument to be passed to `tcp-server-connection-accept`.

>               (allocate-host-address) => "Xe\034\241"

— procedure: host-address-any

> Return an IP address object that specifies “any host”. This object is useful only when passed as the address argument to `open-tcp-server-socket`.

>               (host-address-any) => "\000\000\000\000"

— procedure: host-address-loopback

> Return an IP address object that specifies the local loopback network interface. The loopback interface is a software network interface that can be used only for communicating between processes on the same computer. This address object is useful only when passed as the address argument to `open-tcp-server-socket`.

>               (host-address-loopback) => "\177\000\000\001"