sourCEntral - mobile manpages

pdf

LISTEN

이름

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 AT freechal DOT com>, 2002년 6월 5일
정강훈 <skyeyes AT soback DOT kornet DOT net>, 2000년 7월 2일

pdf