ACCEPT(2)

NOMBRE
accept - acepta una conexión en un zócalo (socket)

SINOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int *addrlen);

DESCRIPCION
El argumento s es un zócalo creado mediante el comando socket(2), enlazado a una dirección gracias a bind(2), y está escuchando por conexiones después de un listen(2). La llamada accept extrae la primera conexión pedida en la cola de conexiones pendientes, crea un nuevo zócalo con las mismas propiedades de s y asigna un nuevo fichero descriptor para el zócalo. Si no quedan conexiones en la cola, y el zócalo no está marcado como no-bloqueador, accept bloquea la petición hasta que haya un zócalo disponible. Si el zócalo está marcado no-bloqueador y no hay conexiones pendientes en la cola en ese instante, accept regresa un error según se describe más adelante. El zócalo aceptado no puede usarse para aceptar conexiones adicionales. El zócalo original s permanece abierto. El argumento addr en la salida contiene la dirección de la entidad conectante, según el nivel de comunicaciones. El formato exacto del parámetro addr está determinado por el dominio en el que la comunicación se efectua. addrlen es un parámetro tanto para input como output; inicialmente contiene la cantidad de espacio indicado por addr; cuando regresa contiene la longitud real (en bytes) de la dirección regresada. Esta llamada se usa con zócalos basados en conexiones, por el momento via SOCK_STREAM. Es posible elegir mediante select(2) un zócalo para realizar un accept simplemente elijiendolo para lectura. Para ciertos protocolos que requieren una confirmación explícita, tal como ISO o DATAKIT, accept puede interpretarse como una función para eliminar de la cola la próxima conexión solicitada sin implicar una confirmación. Se puede eludir a la confirmación a través de una lectura o escritura normal en el nuevo fichero descriptor, y un rechazo puede indicarse implícitamente cerrando el nuevo zócalo. Uno puede obtener datos concernientes a la conexión pedida sin confirmar la conexión simplemente llamando recvmsg(2) con un valor msg_iovlen de 0 y un valor no-nulo en msg_controllen, o también ejecutando una petición de getsockopt(2) Similarmente, es posible proveer información sobre el rechazo de la conexión ejecutando sendmsg(2) suministrando la información de control, o llamando setsockopt(2).

VALORES REGRESADOS
La llamada regresa -1 en caso de error. Si tiene éxito, regresa un entero no-negativo que es un descriptor para el zócalo aceptado.

ERRORES

EBADF
    El descriptor no es válido.

ENOTSOCK
    El descriptor se refiere a un fichero, no a un zócalo.

EOPNOTSUPP
    El zócalo referido no es del tipo SOCK_STREAM.

EFAULT
    El parámetro addr no se encuentra en una zona escribible del espacio de direcciones del usuario.

EWOULDBLOCK
    El zócalo está marcado como no-bloqueador y no hay conexiones presentes que puedan ser aceptadas.

HISTORIA
La función accept apareció en BSD 4.2.

VEASE
bind(2), connect(2), listen(2), select(2), socket(2)