A socket is a software abstract simulating a hardware socket we see in our daily life. To
use the communication channel, an application program (client or server) needs to
request the operating system to create a socket. The application program then can plug
into the socket to send and receive data. For data communication to occur, a pair of
sockets, each at one end of communication, is needed. Figure 17.5 simulates this
abstraction using the socket and plug that we use in our daily life (for a telephone, for
example); in the Internet a socket is a software data structure as we discuss shortly.