ACCEPT(2)

NOMBRE
accept - acepta una conexión sobre un enchufe (socket).

SINOPSIS
#include <sys/types.h>

#include <sys/socket.h>

int accept(int s, struct sockaddr *addr, int *addrlen);

DESCRIPCIÓN
El argumento s es un enchufe que ha sido creado con socket(2), ligado a una dirección con bind(2) y está escuchando para conexiones tras listen(2). accept extrae la primera petición de conexión de la cola de conexiones pendientes, crea un nuevo enchufe con las mismas propiedades de s y asigna un nuevo descriptor de fichero para el enchufe. Si no hay conexiones pendientes en la cola y el enchufe no está marcado como no bloqueante, accept se bloquea hasta que se presente una conexión. Si el enchufe está marcado como no bloqueante y no hay conexiones pendientes en la cola, accept regresa un error tal como se describe abajo. El enchufe aceptado (cuyo descriptor es el valor de retorno de la función) no se puede usar para aceptar más conexiones. El enchufe original, s, permanece abierto. El argumento addr es un parámetro de salida que se rellena con la dirección de la entidad asociada, tal como se conoce en la capa de comunicaciones. El formato exacto del parámetro addr viene determinado por el dominio en el que se produce la comunicación. addrlen es un parámetro de entrada/salida; inicialmente debe contener la cantidad de espacio apuntado por addr; a la salida, contendrá la longitud real (en bytes) de la dirección devuelta. Esta llamada se usa con tipos de enchufes orientados a conexión, por el momento con SOCK_STREAM. Es posible elegir mediante select(2) un enchufe con la intención de hacer un accept seleccionándolo para lectura. Para determinados protocolos que necesitan una confirmación explícita, tales como ISO o DATAKIT, accept se puede interpretar como una función que, simplemente, desencola la siguiente petición de conexión sin que ello implique la confirmación. Se sobreentiende la confirmación cuando se produce una lectura o escritura normal sobre el nuevo descriptor de fichero, y se sobreentiende el rechazo cuando se cierra el nuevo enchufe. Se puede obtener datos de la petición de conexión del usuario sin confirmar la conexión, llamando a la función recvmsg(2) con un valor 0 en msg_iovlen y un valor no cero en msg_controllen, o llamando a la función getsockopt(2) Similarmente, se puede proporcionar información de rechazo de la conexión de usuario llamando a la función sendmsg(2) dando sólo la información de control, o llamando a setsockopt(2).

VALORES DE RETORNO
La llamada regresa -1 ante un error. Si tiene éxito, regresa un entero no negativo que es el descriptor del enchufe aceptado.

ERRORES

EBADF
    El descriptor es inválido.

ENOTSOCK
    El descriptor referencia a un fichero, no a un enchufe.

EOPNOTSUPP
    El enchufe referenciado no es del tipo SOCK_STREAM.

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

EWOULDBLOCK
    El enchufe está marcado como no bloqueante y no hay conexiones que aceptar.

CONFORME CON
SVr4, 4.4BSD (la función accept apareció por primera vez en BSD 4.2). SVr4 documenta una condición de error adicional, EOPNOTSUPP.

VER TAMBIÉN
bind(2), connect(2), listen(2), select(2), socket(2)