Local socket programming is a form of IPC (Inter process communication). Just like internet sockets make use of TCP/IP protocol stack to deal with sending or reception of internet packets, local sockets can be connection-oriented or connection less enabling different processes in the system to communicate via file descriptors. Generally these socket file descriptor allotted are hidden from user but can still be retrieved by use if fileno() call.
Local sockets make use of socket file descriptors to communicate between different processes within a system. An application dealing with local socket programming, is as vulnerable to data race conditions as any other IPC model; hence, we make use of mutexes and semaphores to deal with the problems of data races and synchronization.
A server listens on the "listening socket". The following system calls enable the server side to act as daemon applications to further accept connections from the clients.
The server performs, socket(), bind() and listen() system calls to open a daemon socket and waits for the clients to perform socket() and connect() system calls and accept() call enables the server to establish a connection with the client
Once the connection gets established, the server and the client can exchange messages by using send() and recv() calls or by write() and read().
All the above system calls and related information can be found in the man pages in linux.