2014-06-10 1 views
1

저는 C 언어와 리눅스 플랫폼을 사용하여 소켓 프로그래밍을하고 있습니다. 제 요구 사항은 서버가 2 ~ 3 개의 클라이언트만을 수신하도록 만드는 것입니다. 그게 어떻게 가능해 ?소켓 프로그래밍에서 서버가 클라이언트의 제한된 수만큼 수신 대기하도록 만드는 방법은 무엇입니까?

+1

여기에서 http://man7.org/linux/man-pages/man2/listen.2.html :'int listen (int sockfd, int backlog) ;. 백 로그 인수는 sockfd에 대한 대기 연결의 대기열이 증가 할 수있는 최대 길이를 정의합니다.'백 로그 '가 찾고있는 것이 있습니까? –

+1

서버가 "* 2 또는 3 개의 클라이언트 * 만"수신하는 경우에도 서버 리소스가 무제한 (시스템 리소스에 의해서만 제한됨)의 클라이언트에 병렬로 연속적으로 연결할 수 있다는 것을 알고 있습니다. 더 많은 요구 사항을 지정하고자 할 수 있습니다. – alk

답변

3

당신은 listen() 호출에서 두 번째 인수를 지정하여이를 만듭니다.
나는 당신이 TCP 프로토콜을 사용하고 있다고 가정한다. 사람 페이지에서
:

int listen(int sockfd, int backlog); 

백 로그 인수는 큐 증가 할 수 sockfd와 대한 연결을 보류 에 최대 길이를 정의합니다. 대기열 이 가득 찼을 때 연결 요청이 도착하면 클라이언트는 ECONNREFUSED 또는 의 오류를 수신 할 수 있습니다. 기본 프로토콜이 재전송을 지원하면 이 무시되어 나중에 연결을 다시 시도 할 수 있습니다. 읽기 제안 listen(fd, 2);

: -


그래서 두 클라이언트에 대한 당신처럼 듣고 전화를 당신이 한계에 도달 할 때 http://beej.us/guide/bgnet/output/html/multipage/syscalls.html#listen

+0

번호 백 로그 인수는 수락되기 전에 존재할 수있는 연결 수를 제어하며 플랫폼은 실제 번호를 감지 할 수 없게 변경할 수 있습니다. – EJP

0

가 수신 대기 소켓을 닫고 다시 고객의 경우 하나를 엽니 다 연결을 끊습니다. 당신이 한계에있는 동안

또는

휴가는 열려 있지만 연결을 받아들이지 중지합니다.

listen()에 대한 백 로그 매개 변수는 여기에 대한 다른 대답 및 의견과는 달리이 매개 변수와 아무 관련이 없습니다.

관련 문제