LISTEN(2)

명칭
listen - 소켓상의 접속을 리슨 한다

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/socket.h> int listen(int s, int backlog)

해설
socket(2) 그리고 최초로 소켓이 작성되어 착신 접속을 받아들일 의사 및 착신 접속용의 기다리는 행렬 한계가 listen() 그리고 지정된 후, 접속이 accept(2) 그리고 받아들여집니다. listen() 호출은, 타입이 SOCK_STREAM 또는 SOCK_SEQPACKET 의 소켓에만 적용됩니다.

backlog 파라미터는, 연기중의 접속의 기다리는 행렬을 늘릴 때의 최대장을 정의합니다. 기다리는 행렬이 만배 때에 접속 요구가 도착하면(자), 클라이언트는 ECONNREFUSED (을)를 나타내는 에러를 수신할 가능성이 있습니다. TCP 의 경우는, 접속은 입다물고 떨어뜨려집니다.

FreeBSD 4.5 이전에 syncache 가 도입될 때까지는, backlog 파라미터는 불완전한 접속의 기다리는 행렬의 길이도 정의하고 있었습니다. 이 기다리는 행렬에는, TCP 의 3 웨이한드시크를 완료시킬 수 있도록 처리중의 TCP 소켓이 보관 유지되고 있습니다. 이러한 불완전한 접속은, 현재 모두 syncache 에 보관 유지되어 이것은 기다리는 행렬의 길이에 영향을 받지 않습니다. backlog 값을 늘리는 것으로 서비스 불능 공격에 대처할 필요는, 이미 없습니다.

sysctl(3) MIB 변수 “kern.ipc.somaxconn” 하 backlog 의 하드 제한을 지정합니다. kern.ipc.somaxconn 보다 큰 값, 또는 0 보다 작은 값이 지정되어 있는 경우, backlog 의 지정은 무시되어 kern.ipc.somaxconn 의 값으로 됩니다.

ACCEPT 필터와의 상호작용
소켓에 대해서 accept 필터를 사용하면(자), 접속제인 것의 accept 필터의 기준에 아직 합치하지 않는 소켓을 보관 유지하기 위한 제 2 의 기다리는 행렬이 사용됩니다. 한번 기준에 합치하면, 이러한 소켓은 접속 완료제의 기다리는 행렬에 이동되어 accept()의 대상이 됩니다. 제 2 의 기다리는 행렬이 만배 때에 신규 접속이 도착하면(자), accept 필터의 기준에 아직 합치하지 않는 최고의 소켓이 종료됩니다.

이 제 2 의 기다리는 행렬은, 제 1 의 listen 기다리는 행렬과 같이, backlog 파라미터에 따라 크기가 바뀝니다.

반환값

에러
listen() (은)는 다음의 경우에 처리를 실패합니다.

[EBADF]
    인수 s 하지만 유효한 기술자가 아닙니다.

[ENOTSOCK]
    인수 s 하지만 소켓이 아닙니다.

[EOPNOTSUPP]
    소켓이, listen() (을)를 서포트하는 타입이 아닙니다.

관련 항목
accept(2), accept_filter(9), connect(2), socket(2), sysctl(3), sysctl(8)

역사
listen() 함수는 4.2BSD 그리고 등장했습니다. 실행시에 최대 backlog (을)를 설정할 수 있는 기능, 및 허용 할 수 있는 최대치를 지정하는 경우에 부의 backlog (을)를 사용하는 기능은 FreeBSD 2.2 그리고 등장했습니다.