Когда сервер получает от клиента запрос на соединение, он создает новый сокет для работы с новым соединением. Первый же сокет используется только для установки соединения. Дополнительный сокет для работы с соединением создается при помощи вызова accept(), принимающего очередное соединение.
#include<sys/types.h>
#include<sys/socket.h>
int accept (int sockfd, struct sockaddr *address, size_t *add_len);
Возвращаемое значение соответствует идентификатору нового сокета, который будет использоваться для связи. До тех пор, пока от клиента не поступил запрос на соединение, процесс, выдавший системный вызов accept() переводится в состояние ожидания.
Данная операция выполняется только в программе сервера.