Параметр сокет определяет дескриптор сокета, для которого необходимо ожидать поступления запроса. Параметр адрес-отправителя является указателем на структуру типа sockaddr, а параметр длина-адреса - указателем на переменную целого типа. При поступлении запроса система заполняет указанную структуру типа sockaddr адресом клиента, приславшего запрос, и помещает в переменную длина-адреса длину этого адреса. Затем система создает новый сокет, подключает его к клиенту, приславшему запрос, и возвращает дескриптор нового сокета вызывающей программе. При этом в исходном сокете сохраняется шаблон внешнего получателя, и он остается открытым. Таким образом, главная серверная программа может по-прежнему принимать запросы через исходный сокет.
Как уже было сказано, серверная программа использует функции socket, bind и listen для того, чтобы создать сокет, привязать его к стандартному порту протокола и определить длину очереди для входящих запросов на соединение. Обратите внимание, что вызов функции bind связывает сокет со стандартным портом протокола, но сам сокет не подключается к какому-либо внешнему получателю. Однако при вызове этой функции внешний получатель должен быть определен в виде шаблона (wildcard), что позволит сокету получать запросы на соединение от любого клиента.
После создания сокета сервер должен перейти в состояние ожидания установки соединения. Для этого используется функция accept. После ее вызова серверное приложение переводится в состояние ожидания до тех пор, пока не поступит запрос на соединение. Эта функция имеет следующий синтаксис: новый-сокет = accept{сокет, адрес-отправителя, длина-адреса).