As we have now covered quite a bit of the theory behind setting up network communication with sockets, it is time to put some of it into practice. Most socket code will be written to use a reliable, stream based, client/server protocol. This means that whenever a programmer comes to write a socket application for the first time, this will involve searching through the manual pages to find out about all the system calls involved, and then trying to make sense of all the options available with each call, only to come up with essentially the same solution as everyone else. This may be a bit of an overgeneralization, but it is surprising how many programmers effectively re-invent the same solution to the socket communication problem.