16.7 Summary
Our example of nonblocking reads and writes in
Section 16.2 took
our str_cli echo client and modified it to use nonblocking
I/O on the TCP connection to the server. select is
normally used with nonblocking I/O to determine when a descriptor
is readable or writable. This version of our client is the fastest
version that we show, although the code modifications are
nontrivial. We then showed that it is simpler to divide the client
into two pieces using fork; we will employ the same
technique using threads in Figure 26.2.
Nonblocking connects let us do other
processing while TCP's three-way handshake takes place, instead of
being blocked in the call to connect. Unfortunately, these
are also nonportable, with different implementations having
different ways of indicating that the connection completed
successfully or encountered an error. We used nonblocking
connects to develop a new client, which is similar to a
Web client that opens multiple TCP connections at the same time to
reduce the clock time required to fetch numerous files from a
server. Initiating multiple connections like this can reduce the
clock time, but is also "network-unfriendly" with regard to TCP's
congestion avoidance.
|