Post List

[네트워크 프로그래밍] 열혈 TCP/IP 21~22장 정리(Asynchronous Notification IO 모델, Overlapped IO 모델)

[네트워크 프로그래밍] 열혈 TCP/IP 21~22장 정리(Asynchronous Notification IO 모델, Overlapped IO 모델)


21장과 22장은, 윈도우 운영체제에서 비동기 '알림' 모델과 Overlapped IO 모델에 대해 학습하였습니다.

여기서 말하는 동기화는, send로 예를 들면 send()가 호출 되었을 때 ~ send()가 종료되었을 때를 한 뭉텅이로 보아, 다음 send는 한 뭉텅이가 끝난 후에 호출이 가능한 것을 의미합니다.

21장에서는 그러지 말고 send를 호출하면, send의 종료는 신경쓰지 말고 종료되었다면 '알림'을 받자는 취지 입니다.

22장은 중첩된 I/O 구조에 대해 배웁니다.
이 뜻은 한 쓰레드에서 send나 recv가 중첩되어 일어난다는 뜻이고, 이것이 가능하려면 21장에서 배운 비동기 모델이 전제되어야 합니다, 즉 Non blocking mode여야 합니다.
그에 추가하여 필자는 중첩IO의 완료결과가 '확인'이 되어야 한다고 합니다.

WSASocket에 Overlapped IO 옵션을 추가하면 일단은 되며, 확인을 하는 2가지 방법이 있습니다.
1. Event
2. Completion Routine

Event는 Signaled 상태와 Non Signaled 상태가 있다고 배웠는데, 이때 IO가 완료되면 Signaled 상태로 변화하므로 이를 탐지하는 방법(WSAGetOverlappedResult함수 사용).

2. Completion Routine은 IO를 요청한 쓰레드가 alertable wait상태에 있을경우에 호출되는 함수 입니다. 이때 함수는 CR에 등록된 함수 입니다.

alertable wait상태에 있다는 뜻은, 운영체제가 전달하는 메시지의 수신을 대기하는 쓰레드의 상태라고 합니다. 즉, 중요한거 하는중에는 방해 안하고 좀 쉬운거나 끝난상태에 놓여있을경우 알려주겠다는 뜻 입니다.

[참고] 윤성우의 열혈 TCP/IP 소켓 프로그래밍







댓글