Connecting to a socket is like calling a friend on the phone. First, pick up the phone and check for a dial tone. Then dial your friend’s number. Your call is routed by the telephone network to your friend’s phone, which rings. Your friend answers the call. You exchange greetings and information. When you are done, you say good-bye and hang up.
In a network connections world, your application opens a socket and makes sure there is network access. It makes a connection to the host using the host’s numeric address. The remote host accepts the connection just as your friend accepted your call. Your application exchanges greetings and information with the remote host. When it is finished, it says good-bye and closes the connection.
Of course, neither phone calls nor socket connections always work this way. The line might be busy or you might dial the wrong number. Maybe your friend isn’t home and you get her answering machine. You and your friend might even have a disagreement, and one of you might slam the phone down in disgust. You might even get disconnected.
Similar issues arise in network connections. The remote host might not answer if it’s not running or it can’t handle any more connections. Or it might accept your connection, only to disconnect later if you failed some security checkpoint or if the service is not available. The network connection might be lost for any number of physical reasons, especially in the Palm environment.