GNU Info

Info Node: (gawkinet.info)TCP Connecting

(gawkinet.info)TCP Connecting


Next: Troubleshooting Prev: Gawk Special Files Up: Using Networking
Enter node , (file) or (file)node

Establishing a TCP Connection
=============================

   Let's observe a network connection at work. Type in the following
program and watch the output. Within a second, it connects via TCP
(`/inet/tcp') to the machine it is running on (`localhost'), and asks
the service `daytime' on the machine what time it is:

     BEGIN {
       "/inet/tcp/0/localhost/daytime" |& getline
       print $0
       close("/inet/tcp/0/localhost/daytime")
     }

   Even experienced `awk' users will find the second line strange in two
respects:

   * A special file is used as a shell command that pipes its output
     into `getline'. One would rather expect to see the special file
     being read like any other file (`getline <
     "/inet/tcp/0/localhost/daytime")'.

   * The operator `|&' has not been part of any `awk' implementation
     (until now).  It is actually the only extension of the `awk'
     language needed (apart from the special files) to introduce
     network access.

   The `|&' operator was introduced in `gawk' 3.1 in order to overcome
the crucial restriction that access to files and pipes in `awk' is
always unidirectional. It was formerly impossible to use both access
modes on the same file or pipe. Instead of changing the whole concept
of file access, the `|&' operator behaves exactly like the usual pipe
operator except for two additions:

   * Normal shell commands connected to their `gawk' program with a `|&'
     pipe can be accessed bidirectionally. The `|&' turns out to be a
     quite general, useful, and natural extension of `awk'.

   * Pipes that consist of a special file name for network connections
     are not executed as shell commands. Instead, they can be read and
     written to, just like a full-duplex network connection.

   In the earlier example, the `|&' operator tells `getline' to read a
line from the special file `/inet/tcp/0/localhost/daytime'.  We could
also have printed a line into the special file. But instead we just
read a line with the time, printed it, and closed the connection.
(While we could just let `gawk' close the connection by finishing the
program, in this Info file we are pedantic, and always explicitly close
the connections.)


automatically generated by info2www version 1.2.2.9