Complex Servers
A real server should be able to handle multiple simultaneous client connections and be robust enough to handle situations where the communications link has failed, or the remote machine has unexpectedly stopped communicating.
There are several ways to handle simultaneous connections. Usually, these involve the use of processes or threads, and in other cases, the use of socket multiplexing as described in Socket Multiplexing.
Handling communications issues can usually be done by using the error model to detect failures as described in Handling Errors.