Copyright (C) 2000-2012 |
GNU Info (gawkinet.info)TCP ConnectingEstablishing 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 |