๐ ๋คํธ์ํฌํ๋ก๊ทธ๋๋ฐ 21 22์ฅ ์ ๋ฆฌ
21์ฅ Asynchronous Notification IO ๋ชจ๋ธ
๋๊ธฐ์ ๋น๋๊ธฐ
๋๊ธฐ ์ ์ถ๋ ฅ
- ์ ์ถ๋ ฅ ํจ์์ ํธ์ถ ๋ฐ ๋ฐํ์ ์๊ธฐ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์์ ๋ฐ ์๋ฃ์ ์๊ธฐ์ ์ผ์น
- ํจ์๊ฐ ํธ์ถ๋ ๋์์๋ ๋ค๋ฅธ ์์ ์ํ x
๋น๋๊ธฐ ์ ์ถ๋ ฅ
- ์ ์ถ๋ ฅ ํจ์์ ํธ์ถ ์์ ์ด ๋ฐ์ดํฐ ์ก์์ ์ด ์์๋๋ ์๊ธฐ
- ํธ์ถ๋ ํจ์๋ ์ด๋ด ๋ฐํ, ๋ด๋ถ์ ์ผ๋ก ๊ณ์ ์ ์ถ๋ ฅ์ด ์งํ๋๋ ๋ฐฉ์
๋๊ธฐ Notification
- ์ ์ถ๋ ฅ์ Notification(์๋ฆผ)์ด ๋๊ธฐ์
- select() ํจ์๊ฐ ๋ํ์ ์์
- ์ ์ถ๋ ฅ์ด ์๋ฃ ๋๋ ๊ฐ๋ฅํ ์ํ ์ ๋ฐํ์ ํ๊ธฐ๋๋ฌธ
๋น๋๊ธฐ Notification
- ์ ์ถ์ญ์ Notification(์๋ฆผ)์ด ๋น๋๊ธฐ์
- WSAEventSelect ํจ์
- ์ ์ถ๋ ฅ ์๋ฃ์ ์๊ด์์ด ๋ฌด์กฐ๊ฑด ๋ฐํ
- ์ ์ถ๋ ฅ ์๋ฃ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ณ๋์ ๊ณผ์ ํ์
- IO ์ํ๋ณํ ๋ช ๋ น -> ๋ค๋ฅธ ์์ ์งํ -> IO ์ํ๋ณํ ํ์ธ
๋น๋๊ธฐ Notification IO ๋ชจ๋ธ์ ์ดํด์ ๊ตฌํ
WSAEventSelect
- ๊ด์ฐฐ๋์ ์์ผํธ๋ค, ์ด๋ฒคํธ ์ค๋ธ์ ํธ ๊ฐ์
- ์์ผ ์ ๋ฌ๋ ์ด๋ฒคํธ ์ค ํ๋๊ฐ ๋ฐ์ํ๋ฉด signaled ์ํ๋ก ๋ฐ๊ฟ
- ์์ผ ํ๋๋น ํ ๋ฒ์ ํจ์ ํธ์ถ์ด ์งํ
- select()์ ๋ฌ๋ฆฌ ํ๋ฒ ๋ฑ๋ก๋ ์์ผ์ ๋งค ํจ์ํธ์ถ ๋๋ง๋ค ์ฌ๋ฑ๋ก ํ์ x
WSACreateEvent / WSACloseEvent
- manual-reset ๋ชจ๋ Event ์ค๋ธ์ ํธ ์์ฑ์ ํธ์๋ฅผ ์ํด ์ ์
WSAWaitForMultipleEvents
- ์ด๋ฒคํธ ๋ฐ์์ ๋ฌด์ ํ์ธ์ ์ฌ์ฉ
- TRUE ์ ๋ฌ ์ ๋ชจ๋ Evnet ์ค๋ธ์ ํธ๊ฐ signaled ์ํ์ผ ๋ ๋ฐํ
- FALSE ์ ๋ฌ ์ ํ๋๋ง signaled ์ํ๊ฐ ๋์ด๋ ๋ฐํ
- manual-reset์ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง
- manual-reset์ ํ๋ฒ signaled(์ด๋ฒคํธ ๋ฐ์)๊ฐ ๋๋ฉด ๊ณ์ ์ ์งํ๊ธฐ ๋๋ฌธ
WSAEnumNetworkEvents
- ์ด๋ฒคํธ ์ข ๋ฅ ๊ตฌ๋ถ
- ์ด๋ฒคํธ ๋ฐ์์ ์๋ฌ ํ์ธ ๊ฐ๋ฅ
- ์์ ํ ๋ฐ์ดํฐ ์กด์ฌ ์ FD_READ
- ์ฐ๊ฒฐ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ FD_ACCEPT
22์ฅ Overlapped IO ๋ชจ๋ธ
IO์ ์ค์ฒฉ
- ์ฐ๋ ๋์ ๊ด์ ์์ ๋์์ ๋ ์ด์์ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฒฉ์ํค๋ ๊ฒ
- ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฒฉ์ํค๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ ์ ์ถ๋ ฅ ํจ์๊ฐ ๋-๋ธ๋กํน ๋ชจ๋๋ก ๋์ํด์ผํจ
Overlapped IO
๋น๋๊ธฐ IO
- ๋ ๋ธ๋กํน ๋ชจ๋์ IO
- IO๊ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋์ํด์ผ IO ์ค์ฒฉ ๊ฐ๋ฅ
- Overlapped IO๋ IO๋ฅผ ์ค์ฒฉ์ํค๋ ์ ์ถ๋ ฅ ๋ชจ๋ธ์
Overlapped IO
- Overlapped IO๊ฐ ์๋๋ผ๋ IO ์ค์ฒฉ ๊ฐ๋ฅ
- Overlapped IO์ ํฌ์ปค์ค๋ ์ ์ถ๋ ฅ์ ์๋ฃ ํ์ธ ๋ฐฉ๋ฒ
WSASocket
- Overlapped IO์ ์์ผ ์์ฑ
- ๋ง์ง๋ง ์ธ์๋ก WSA_FLAG_OVERLAPPED ์ ๋ฌ
WSASend
- Overlapped IO ์งํ
- IpOverlapped
- WSAOVERLAPPED ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ฃผ์ ๊ฐ ์ ๋ฌ
- IpCompletionRoutine
- Completion Routine ํจ์์ ์ฃผ์ ๊ฐ ์ ๋ฌ
WSAGetOverLappedResult
- ๋ฐ์ดํฐ ์ก์์ ๊ฒฐ๊ณผ์ ํ์ธ ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ ์ ์ก์ด ๊ณ์ ์งํ๋๋ ์ํฉ์์๋ WSASend๊ฐ SOCK_ERROR ๋ฐํ
- WSAGetLastError() -> WSA_IO_PENDING ์ด๋ฉด ์ ์ก ์งํ ์ค
- ์ ์ก๋ ๋ฐ์ดํธ ์ ํ์ธ + ์์ ๋ ๋ฐ์ดํธ ์ ํ์ธ์๋ ์ฌ์ฉ
WSARecv
- WSASend์ ๋น์ท
Completion Routine
- IO๊ฐ ์๋ฃ๋์์๋ ํธ์ถํ๋ ํจ์
- IO ์๋ฃ ์ ๋ฏธ๋ฆฌ ๋ฑ๋ก๋ CompletionRoutine์ด ์ด์์ฒด์ ์ ์ํด ์๋ ํธ์ถ
- ํด๋น ์ฐ๋ ๋๊ฐ alertable wait ์ํ์ฌ์ผ ํธ์ถ ๊ฐ๋ฅ
- alertable wait : ์ด์์ฒด์ ๊ฐ ์ ๋ฌํ๋ ๋ฉ์ธ์ง์ ์์ ์ด ๊ฐ๋ฅํ ์ํ (ํน๋ณํ ์ผ ์์)