[질문] 리눅스 소켓 프로그래밍 중 ... listen 함수의 연결 요청 대기큐 설정 후 의문점 ㅡㅡa
안녕하세요?? 리눅스 소켓 프로그래밍 공부 중 의문점이 생겨서 질문 올립니다 ..
int listen(int s, int backlog); <-- 요 함수에서 backlog에 일정 숫자를 대입하면 연결 요청 대기
큐라는것이 생겨서 클라이언트로 부터 연결 요청 즉, connnect()함수가 호출 되면 일단 연결 요청 대기
큐로 들어가게 되고 서버에서는 accept()함수를 통해서 이 대기 큐의 클라이언트를 하나씩 꺼내어
연결을 맺고 서로 통신이 이루어 진다고 되어있습니다.. (제가 공부하고 있는 책에요 ㅜㅜ) 그래서 listen
함수의 backlog에 2를 주고 연결 요청을 두개 이상 못 받게끔 코드를 수정하고 accept()함수 부분을 없애
버렸습니다. 아래는 제가 테스트를 하기 위해 수정한 서버의 코드 일부분 입니다. 참고로 error()이거는
제가 예외처리를 위해 만든것이고요 .. listen()함수로 2개의 공간을 갖는 대기 큐를 만들고 while문을
무한 반복 시켜 단순의 클라이언트의 접속 상태를 확인하고자 만든 예제 입니다.
if(listen(serv_sock, 2) == -1) error("listen() error"); while(1) {}
그러니까 단순히 연결 요청만 받아서 만약 2개 이상의 클라이언트로 부터의 연결 요청이 들어 오면 다음번
클라이언트의 상태가 어떻게 되는지 궁금했습니다 .. 제 생각 대로 라면 먼저 client1이 접속요청을 하면
당연히 accept()함수 부분이 없으니까 대기큐의 첫번째 공간에 들어가게 되고 client2가 접속을 하게 되면
대기큐의 두번째 공간에 들어가 대기 큐는 꽉 차서 더 이상 연결 요청을 수용할 수 없게 되어 client3는
접속을 못하게 됐어야 하는데 ... client3, client4 .. 이렇게 계속 연결 요청이 되더라구요 ...
그럼 연결 요청 대기큐의 크기를 잡아주는 의미가 없어지지 않나요?? 제가 뭔가 잘 못 이해하고 있는건가
요??
댓글 달기