Using `gawk' for Network Programming
====================================
`EMISTERED': A host is a host from coast to coast,
and no-one can talk to host that's close,
unless the host that isn't close
is busy hung or dead.
In addition to being able to open a two-way pipeline to a coprocess
on the same system (*note Two-Way Communications with Another Process:
Two-way I/O.), it is possible to make a two-way connection to another
process on another system across an IP networking connection.
You can think of this as just a _very long_ two-way pipeline to a
coprocess. The way `gawk' decides that you want to use TCP/IP
networking is by recognizing special file names that begin with
`/inet/'.
The full syntax of the special file name is
`/inet/PROTOCOL/LOCAL-PORT/REMOTE-HOST/REMOTE-PORT'. The meaning of
the components are:
PROTOCOL
The protocol to use over IP. This must be either `tcp', `udp', or
`raw', for a TCP, UDP, or raw IP connection, respectively. The
use of TCP is recommended for most applications.
*Caution:* The use of raw sockets is not currently supported in
version 3.1 of `gawk'.
LOCAL-PORT
The local TCP or UDP port number to use. Use a port number of `0'
when you want the system to pick a port. This is what you should do
when writing a TCP or UDP client. You may also use a well-known
service name, such as `smtp' or `http', in which case `gawk'
attempts to determine the pre-defined port number using the C
`getservbyname' function.
REMOTE-HOST
The IP address or fully-qualified domain name of the Internet host
to which you want to connect.
REMOTE-PORT
The TCP or UDP port number to use on the given REMOTE-HOST.
Again, use `0' if you don't care, or else a well-known service
name.
Consider the following very simple example:
BEGIN {
Service = "/inet/tcp/0/localhost/daytime"
Service |& getline
print $0
close(Service)
}
This program reads the current date and time from the local system's
TCP `daytime' server. It then prints the results and closes the
connection.
Because this topic is extensive, the use of `gawk' for TCP/IP
programming is documented separately. Note:Top, for a much more
complete introduction and discussion, as well as extensive examples.