listen

Autres langues

Langue: ko

Version: 1993년 6월 23일 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

이름

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

사용법

#include <sys/socket.h>

int listen(int s, int backlog);

설명

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

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

주의

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

반환값

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

에러

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)

역자

정강훈 <skyeyes@soback.kornet.net>, 2000년 7월 2일