Voltar à lista
Linux x86_64Rede & sockets#288

accept4

Como accept, mas permite definir flags (SOCK_NONBLOCK, SOCK_CLOEXEC) atomicamente no novo socket.

Descrição

Evita a condição de corrida (e o risco de vazamento de descritor entre um fork+exec concorrente) de chamar `accept` seguido de `fcntl(F_SETFL)`/`fcntl(F_SETFD)` separadamente.

Header: sys/socket.hman 2Desde o kernel 2.6.28

Assinatura

int accept4(
    int sockfd,
    struct sockaddr * addr,
    socklen_t * addrlen,
    int flags
);

Parâmetros

ParâmetroTipoDescrição
sockfdintSocket em modo de escuta.
addrstruct sockaddr *Se não for NULL, recebe o endereço do par remoto.
addrlensocklen_t *Tamanho de `addr`; atualizado com o tamanho real.
flagsintSOCK_NONBLOCK e/ou SOCK_CLOEXEC.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1sockfdint
rsiargumento 2addrstruct sockaddr *
rdxargumento 3addrlensocklen_t *
r10argumento 4flagsint

Valor de retorno

Um novo descritor de socket conectado em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EAGAIN(11)
Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
ECONNABORTED(103)
Conexão abortada localmente.
EMFILE(24)
Limite de arquivos abertos do processo atingido.
ENFILE(23)
Limite de arquivos abertos no sistema atingido.
EPERM(1)
Operação não permitida (falta de privilégio).

Relacionadas