Sockets are a way to enable inter-process communication between programs running on a computer, or between programs running on separate computers. Programs that communicate via network sockets typically rely on using the Internet Protocol (IP) to send and receive data.
There are a number of different types of sockets. The most common are:
Stream sockets: which use the Transmission Control Protocol (TCP) to encapsulate and ensure reliable delivery of a stream of data.
Datagram sockets: which use the User Datagram Protocol (UDP) to transmit datagrams, without needing to establish a persistent connection between systems.
Unix Domain Sockets: which use local files to send and receive data instead of network interfaces and IP packets.
Raw sockets: which allow applications to create and modify packets instead of relying on the host operating system.
Each IP-based socket on a system is unique, and is identified by a combination of IP address, the protocol that the socket is using (TCP or UDP), and a numeric port number, which is mapped to the application that is using the socket by the operating system. Unix Domain Sockets use the local file that is associated with a socket to identify it uniquely.
To learn more about sockets, and how to examine and troubleshoot them, please read our Understanding Sockets tutorial.
For an in depth explanation of how to implement and use sockets on a Linux system, visit the socket(7) manual page, and the related manual pages there.