Принять соединение на сокете
#include <sys/types.h>#include <sys/socket.h>int accept( int s,struct sockaddr *addr,socklen_t *addrlen );
SOCK_STREAM
.libsocket
Функция accept():
Если в очереди нет ожидающих соединений и сокет не помечен как неблокирующий, accept() блокирует вызывающего клиента до тех пор, пока не будет установлено соединение. Если сокет помечен как неблокирующий и в очереди нет ожидающих подключений, accept() возвращает ошибку, как описано ниже. Принимающий сокет нельзя использовать для приема дополнительных подключений. Исходный сокет s остается открытым.
При выполнении select() для чтения из неподключенного сокета (на который был выполнен listen()), select() сообщает, когда возник запрос на соединение. Таким образом, возможно выполнить accept(), который не будет блокироваться. Для получения дополнительной информации см. select().
Для некоторых протоколов, требующих явного подтверждения, accept() может рассматриваться как простое исключение из очереди следующего запроса на соединение, а не как подтверждение. Подтверждение может являться обычным чтением или записью в новый дескриптор файла, а отклонение может подразумеваться путем закрытия нового сокета.
Возможно получение данных запроса на подключение пользователя без подтверждения подключения:
0
и ненулевым msg_controllen либо Точно так же возможно предоставить информацию об отклонении подключения пользователя, выполнив sendmsg() только с контрольной информацией, либо вызвав setsockopt().
Дескриптор сокета, установевшего соединение. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
SOCK_STREAM
. POSIX 1003.1
bind(), close(), connect(), listen(), select(), socket()
Предыдущий раздел: Описание API сетевой библиотеки