본문 바로가기
IT/데이터베이스_네트워크

윤성우의 열혈 tcp/ip 소켓 프로그래밍 22장 연습문제 솔루션

by nutrient 2021. 5. 24.
728x90
728x170

 

 

답    안 1. 
Asynchronous(비동기) Notification IO 모델의 경우에는 IO 관련 이벤트의 발생을 알리는 과정이 비동기로 처리가 된다. 그러나 Overlapped IO 모델의 경우는 IO가 완료된 상황을 확인하는 과정이 비동기로 처리된다. 

답    안 2.
비동기 IO는 IO가 완료된 상황을 확인하는 과정이 비동기로 처리됨을 의미한다. 그리고 이러한 유형으로 IO를 진행하기 위해서는 IO가 넌-블로킹 모드로 동작해야 하며, IO가 넌-블로킹 모드로 동작해서 비동기로 IO를 진행하게 되면, 이를 바탕으로 IO를 중첩시킨 형태인, Overlapped IO가 가능해진다. 

답    안 3.
WSARecv 함수호출 시에는 인자로 OVERLAPPED 구조체 변수의 주소 값을 전달하게 되어 있는데, 이 때 한번의 함수 호출당 하나의 OVERLAPPED 구조체 변수가 필요하다. 왜냐하면 WSARecv 함수 내에서 OVERLAPPED 구조체 변수를 활용하기 때문이다. 그래서 제시된 while 반복문은 잘못되었다. 연결요청을 수락한 다음에 이어서 WSARecv 함수를 호출하는데, 이 때 사용하는 OVERLAPPED 구조체 변수가 모두 동일한 변수이기 때문이다. 결과적으로 하나의 OVERLAPPED 구조체 변수를 이용해서 다수의 WSARecv 함수호출을 진행한 셈이 되었다. 이 문제의 해결을 위해서는 OVERLAPPED 구조체 변수를 동적 할당 하는 방법도 해결책으로 생각해볼 수 있다. 

답    안 4. 
WSASend 함수가 SOCKET_ERROR를 반환한 상태에서, 이어서 WSAGetLastError 함수를 호출했는데 WSA_IO_PENDING를 반환된 경우

답    안 5. 
'alertable wait 상태'라는 것은 운영체제가 전달하는 메시지의 수신을 대기하는 상태를 뜻하며, 다음 함수가 호출된 상황에서 쓰레드는 alertable wait 상태가 된다.
    WaitForSingleObjectEx
    WaitForMultipleObjectsEx
    WSAWaitForMultipleEvents
    SleepEx

 

728x90
그리드형

댓글