소켓 입출력 모델의 경우
1. Select 모델
2. WSAAsyncSelect 모델
3. WSAEventSelect 모델
4. Overapped 모델
들이 있다.
1. Select 모델
- Select()함수가 핵심적인 역할을 하며 소켓모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리 할 수 있다.
- Select 모델이 제공하는 기능을 소켓 함수를 호출해야 할 시점을 알려줌으로써 함수 호출 시 항상 성공하도록 하는 것
- 동작원리
ㆍ세 개의 소켓 셋(Socket set)을 준비 해야 하며
ㆍ소켓 셋은 소켓 디스크립터의 집합으로써 해당 소켓으로 하고자 하는 작업의 종류를 나타낸다.
*만약 어떤 소켓의 recv()함수를 호출해야 할 시점을 알고 싶으면 읽기 셋에 넣고, Send()함수를 호출해야할 시점을 알고 싶다면
쓰기 셋에 넣으면 된다.
*소켓 셋을 준비해서 Select()함수에 전달하면 함수는 소켓 셋에 포함된 소켓에 대해 해당 작업을 할 수 있을 떄 까지 대기한다.
*적어도 1개의 소켓이 준비되면 Select()함수를 리턴한다. 이떄 소켓 셋에는 준비된 소켓만 남고 나머지는 모두 제거된다.
- 읽기 셋(read Set)
ㆍ클라이언트가 접속했으므로 accept()함수를 호출할 수 있다.
ㆍ데이터를 받았으므로 recv(), recvfrom() 등의 함수를 호출할 수 있다.
ㆍ연결이 종료되었으므로 recv(), recvfrom() 등의 함수를 호출 할 수 있다 이때 리턴값은 0 or SOCKET_ERROR이 된다.
- 쓰기 셋(write Set)
ㆍ함수 호출 시점 : 송신 버퍼가 충분하므로 send(), sendto() 등의 함수를 호출하여 데이터를 보낼 수 있다.
ㆍ함수 호출 결과 : 넌블로킹 소켓을 사용한 Connect() 함수 호출이 성공하였다.
- 예외 셋(exception Set)
ㆍ함수 호출 시점 : OOB(Out-Of-Band) 데이터가 도착했으므로 recv(), recvfrom() 등의 함수를 호출하여 OOB 데이터를 받을 수 있다.
ㆍ함수 호출 결과 : 넌블로킹 소켓을 사용한 Connect()함수 호출이 실패 했다.
※ OOB(Out-Of-Band) 란?
- TCP에서 긴급한 데이터의 통신을 위해서 사용
'Network Programing > Network 개념' 카테고리의 다른 글
소켓 입출력 모델 - 3. WSAEventSelect 모델 (0) | 2016.09.11 |
---|---|
소켓 입출력 모델 - 2. WSAAsyncSelect 모델 (0) | 2016.09.11 |
소켓 모드 와 동기/비동기 란? (0) | 2016.09.11 |
쓰레드 동기화 기법 (0) | 2016.09.10 |
동기(Sync) 와 비동기(ASync) (0) | 2016.09.01 |