16.10.4 Example of Reading Datagrams

Here is the client program corresponding to the server above.

It sends a datagram to the server and then waits for a reply. Notice
that the socket for the client (as well as for the server) in this
example has to be given a name. This is so that the server can direct
a message back to the client. Since the socket has no associated
connection state, the only way the server can do this is by
referencing the name of the client.

Keep in mind that datagram socket communications are unreliable. In
this example, the client program waits indefinitely if the message
never reaches the server or if the server’s response never comes
back. It’s up to the user running the program to kill and restart
it if desired. A more automatic solution could be to use
select (see Waiting for I/O) to establish a timeout period
for the reply, and in case of timeout either re-send the message or
shut down the socket and exit.