소켓 입출력 모델 - 2. WSAAsyncSelect 모델 2. WSAAsyncSelect 모델 - WSAAsyncSelect() 함수가 핵심적인 역할을 하며 윈도우 메시지 형태로 소켓과 관련된 네트워크 이벤트를 처리 할 수 있다. - 모든 소켓과 관련된 메시지는 하나의 윈도우, 즉 하나의 윈도우 프로시저로 전달되므로 멀티스레드를 사용하지 않고도 여러 소켓을 처리할 수 있다. - 동작원리 ㆍWSAAsyncSelect() 함수를 이용하여 소켓을 위한 윈도우 메시지와 처리할 네트워크 이벤트를 등록 ㆍ등록한 네트워크 이벤트가 발생하면 윈도우 메시지가 발생하고 윈도우프로시저가 호출 ㆍ윈도우 프로시저에서 받은 메시지의 종류에 따라 적절한 소켓 함수를 호출하여 처리 더보기 소켓 입출력 모델 - 1.Select 모델 소켓 입출력 모델의 경우 1. Select 모델 2. WSAAsyncSelect 모델 3. WSAEventSelect 모델 4. Overapped 모델들이 있다. 1. Select 모델 - Select()함수가 핵심적인 역할을 하며 소켓모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리 할 수 있다. - Select 모델이 제공하는 기능을 소켓 함수를 호출해야 할 시점을 알려줌으로써 함수 호출 시 항상 성공하도록 하는 것 - 동작원리 ㆍ세 개의 소켓 셋(Socket set)을 준비 해야 하며 ㆍ소켓 셋은 소켓 디스크립터의 집합으로써 해당 소켓으로 하고자 하는 작업의 종류를 나타낸다. *만약 어떤 소켓의 recv()함수를 호출해야 할 시점을 알고 싶으면 읽기 셋에 넣고, Send()함수를 호.. 더보기 소켓 모드 와 동기/비동기 란? 1. 소켓 모드 1.1 블로킹 소켓(blocking) - 소켓 함수 호출 시 조건이 만족 되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태이다. - 소켓 함수는 리턴하지 않으면 멀티스레드를 사용하여 다른 작업을 하지 않는 한 어플리케이션이 더 는 진행 할수 없다. - Socket() 함수는 기본적으로 블로킹 소켓이다. 1.2 넌 블로킹 소켓(Non-blocking) - 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행 할 수 있다. - ioctlsocket()함수를 호출해야만 넌블로킹 소켓으로 바꿀수 있다. - 넌 블로킹 소켓은 WSAEWOULDBLOCK으로 항시 체크하여 다시 소켓 함수를 호출하여야 한다. ※ listen_sock이 넌블로킹이면 client.. 더보기 이전 1 2 3 4 5 6 7 8 ··· 19 다음