LISTEN(2)

이름
listen - 소켓에서 연결들을 기다린다.

사용법
#include <sys/socket.h>

int listen(int s, int backlog);

설명
연결을 받아들이기 위해, 소켓은 우선 들어오는 연결들을 받아들이기 위한 socket(2)을 만들고, 들어오는 연결들에 대한 큐 제한 값을 listen으로 명시하고, 그리고 연결들을 accept(2)으로 받아들인다. listen 함수는 SOCK_STREAM 이나 SOCK_SEQPACKET 타입의 소켓들에만 적용된다.

backlog 인자는 아직 미결인 연결들에 대한 큐의 늘어날 수 있는 최대 길이를 정의한다. 큐에 도착한 연결 요청들이 꽉 찬다면 클라이언트는 ECONNREFUSED 를 가리키는 에러를 받거나, 만일 하위 프로토콜이 재전송을 지원한다면, 요청은 재시도가 성공되도록 하기 위해 무시된다.

주의
TCP 소켓에서 backlog 인자의 행위는 Linux 2.2에서 바뀌었다. 현재는 완결이 안된 연결 요청에 대한 큐 길이 대신에 accept가 되길 기다리는 연결이 완전히 연결된 소켓들의 큐 길이를 지정한다 완결이 안된 소켓들에 대한 큐의 최대 길이는 tcp_max_syn_backlog sysctl을 사용하여 설정할 수 있다. syncookies가 활성화되어 있을 때는, 논리적인 최대 길이는 없게 되며 이 sysctl 설정은 무시된다. 더 많은 정보를 위해서 tcp(7)를 참고하라.

반환값
성공시, 0이 리턴된다. 에러시, -1이 리턴되며 errno 는 적당한 값으로 설정된다.

에러

EADDRINUSE
    다른 소켓이 이미 같은 포트를 listen하고 있다.

EBADF
    인자 s 가 유효한 디스크립터가 아니다.

ENOTSOCK
    인자 s 가 소켓이 아니다.

EOPNOTSUPP
    소켓이 listen 작동을 지원하는 타입이 아니다.

호환
단일 Unix, 4.4BSD, POSIX 1003.1g 초안 listen 시스템 함수는 4.2BSD에서 처음 나타났다.

버그
만일 소켓이 AF_INET타입이고 backlog 인자가 상수 SOMAXCONN 보다 크다면(Linux 2.0 & 2.2에서 128), 그것은 예고없이 SOMAXCONN으로 짤려진다. BSD(몇몇 BSD-기반 시스템)는 backlog를 5로 제한했으므로 호환성을 염두에 둔 응용 프로그램에서는 이 값에 의존하지 마라.

관련 항목
accept(2), connect(2), socket(2)

역자
이승식 <zican@freechal.com>, 2002년 6월 5일
정강훈 <skyeyes@soback.kornet.net>, 2000년 7월 2일