Contents:
- 1 °³¿ä
- 2 °ü·Ã¼Àû
- 3 Áֿ丵ũ
- 4 Overlapped I/O ¶õ?
- 5 Overlapped I/O ¿Ï·á ÅëÁö ó¸® ¹æ¹ý
- 5.1 Event Object ¸¦ ÀÌ¿ëÇÑ ¹æ¹ý
- 5.2 Completion Routine À» ÀÌ¿ëÇÑ ¹æ¹ý
- 5.2.1 SleepEx() ÇÔ¼ö
- 6 ¼¹ö ±¸Çö
- 6.1 ó¸® °úÁ¤
- 7 Ŭ¶óÀÌ¾ðÆ® ±¸Çö
- 7.1 ó¸® °úÁ¤
- 8 ´Ù¿î·Îµå
- 9 °ü·Ã¸µÅ©
Overlapped I/O ¸ðµ¨Àº IOCP ¸¦ Á¦¿ÜÇÑ Winsock ¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾î¶² I/O ¸ðµ¨ º¸´Ù ¶Ù¾î³ ¼º´ÉÀ» ¹ßÈÖÇÑ´Ù. ¶ÇÇÑ IOCP ¿Í´Â ´Þ¸® À©µµ¿ìÁî CE ¸¦ Á¦¿ÜÇÑ ¸ðµç À©µµ¿ìÁî Ç÷§Æû¿¡¼ »ç¿ë °¡´ÉÇÏ´Ù. Overlapped I/O ¸ðµ¨Àº ºñµ¿±âÀûÀ¸·Î Çϳª ÀÌ»óÀÇ I/O ÀÛ¾÷À» µ¿½Ã¿¡ ¼öÇàÇÒ ¼ö Àֱ⠶§¹®¿¡ ³ôÀº ¼º´ÉÀ» ³¾ ¼ö ÀÖ´Ù.
- Network Programming for Microsoft Windows - 2nd Edition
- Anthony Jones.Jim Ohlund °øÀú, ±è³²½Ä ¿ª, Á¤º¸¹®È»ç
- ¿Ç÷°ÀÇ TCP/IP ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö
3 Áֿ丵ũ #
<±×¸² 1> ºñ Overlapped I/O ó¸®
<±×¸² 2> Overlapped I/O ó¸®
5 Overlapped I/O ¿Ï·á ÅëÁö ó¸® ¹æ¹ý #
5.1 Event Object ¸¦ ÀÌ¿ëÇÑ ¹æ¹ý #
5.2 Completion Routine À» ÀÌ¿ëÇÑ ¹æ¹ý #
SleepEx() ÇÔ¼ö´Â Sleep() ÇÔ¼ö¿Í µ¿ÀÏÇÏ°Ô ÁöÁ¤µÈ ½Ã°£¸¸Å È£ÃâÇÑ ¾²·¹µå¸¦ ´ë±â ( Suspend ) »óÅ·Π¸¸µç´Ù. ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº °æ¿ì¿¡ È£ÃâÇÑ ¾²·¹µå¸¦ ½ÇÇà »óÅ·ΠµÇµ¹¸°´Ù.
- ÀÔÃâ·Â ( I/O ) °¡ ¿Ï·áµÇ¾î Äݹé ( Callback ) ÇÔ¼ö°¡ È£Ã⠵ǾúÀ» °æ¿ì
- APC ( Asynchronous Procedure Call ) ÀÌ ¾²·¹µå Queue ¿¡ µé¾î¿ÔÀ» °æ¿ì
- ÁöÁ¤µÈ ½Ã°£ÀÌ °æ°ú µÇ¾úÀ» °æ¿ì
DWORD SleepEx(
DWORD dwMilliseconds,
BOOL bAlertable
);
ÀÌ ÇÔ¼öÀÇ ¹Ýȯ°ªÀº ´ÙÀ½°ú °°´Ù.
- ÁöÁ¤µÈ ½Ã°£ÀÌ °æ°ú µÇ¾úÀ» °æ¿ì, 0 ( Zero ) ¸¦ ¹ÝȯÇÑ´Ù.
- bAlertable °¡ TRUE ·Î ¼³Á¤µÇ°í ÀÔÃâ·ÂÀÌ ¿Ï·áµÈ ÈÄ Äݹé ÇÔ¼ö°¡ È£Ã⠵ǾúÀ» °æ¿ì WAIT_IO_COMPLETION À» ¹ÝȯÇÑ´Ù.
»ç¿ëÇϴµ¥ ÀÖ¾î¼ ÁÖÀÇ ÇØ¾ßÇÒ °ÍÀº ÀÔÃâ·Â ÇÔ¼ö¸¦ È£ÃâÇÑ ¾²·¹µå¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ bAlertable °¡ TRUE ·Î ¼³Á¤µÇÁö ¾ÊÀ» °æ¿ì, Äݹé ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Ê°Å³ª APC °¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. µû¶ó¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ ¾²·¹µå°¡ Á¾·áµÇÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ßÇÑ´Ù.
Âü°í> APC ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â MSDN ÀÇ
QueueUserAPC ÇÔ¼ö ¼³¸íÀ» ÂüÁ¶ ÇÑ´Ù.
- ƯÁ¤ Æ÷Æ®·Î ¿¬°áÀ» ±â´Ù¸± ¼ö ÀÖ´Â ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù ( WSASocket(), bind(), listen() ).
- ¿¬°á ¿äûÀ» ¹Þ¾ÆµéÀδ٠( accept() ).
- ¿¬°á¿¡ ´ëÇÑ ¼ÒÄÏÀ» À§ÇÑ WSAOVERLAPPED ±¸Á¶Ã¼ÀÇ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. À̺¥Æ® ¿ÀºêÁ§Æ®¸¦ WSAOVERLAPPED ±¸Á¶Ã¼ÀÇ °´Ã¼¿¡ ÇÒ´çÇϰí WSAWaitForMultipleEvents() ¸¦ È£ÃâÇÒ ¶§ »ç¿ëÇÒ À̺¥Æ® °´Ã¼ÀÇ ¹è¿¿¡µµ »ðÀÔÇÑ´Ù.
- WSAOVERLAPPED ±¸Á¶Ã¼¸¦ ¸Å°³ º¯¼ö·Î Àü´ÞÇÏ¿© WSARecv()/WSASend() ¸¦ È£ÃâÇÑ´Ù.
- À̺¥Æ® ¹è¿¿¡ ´ëÇÏ¿© WSAWaitForMultipleEvents() ¸¦ È£ÃâÇÏ¿© I/O ÀÛ¾÷ÀÌ ¿Ï·áµÇ±â¸¦ ±â´Ù¸°´Ù.
- I/O ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é WSAGetOverlappedResult() ¸¦ È£ÃâÇÏ¿© °á°ú¸¦ È®ÀÎÇÑ´Ù.
- WSAResetEvent() ¸¦ ÀÌ¿ëÇÏ¿© À̺¥Æ® ¿ÀºêÁ§Æ®ÀÇ »óŸ¦ ¸®¼Â½ÃŲ´Ù. ¿Ï·áµÈ I/O ÀÛ¾÷¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÑ´Ù.
- ´Ù¸¥ I/O ÀÛ¾÷À» WSARecv()/WSASend() È£ÃâÇÏ¿© ½ÃÀÛÇÑ´Ù.
- 5 ~ 8 ÀÇ °úÁ¤À» ¹Ýº¹ÇÑ´Ù.
7 Ŭ¶óÀÌ¾ðÆ® ±¸Çö #
- ¿¬°áÇÒ ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù ( WSASocket() ).
- ¼¹ö·Î ¿¬°áÀ» ¿äûÇÑ´Ù ( connect() ).
- ¿¬°á¿¡ ´ëÇÑ ¼ÒÄÏÀ» À§ÇÑ WSAOVERLAPPED ±¸Á¶Ã¼ÀÇ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. À̺¥Æ® ¿ÀºêÁ§Æ®¸¦ WSAOVERLAPPED ±¸Á¶Ã¼ÀÇ °´Ã¼¿¡ ÇÒ´çÇϰí WSAWaitForMultipleEvents() ¸¦ È£ÃâÇÒ ¶§ »ç¿ëÇÒ À̺¥Æ® °´Ã¼ÀÇ ¹è¿¿¡µµ »ðÀÔÇÑ´Ù.
- WSAOVERLAPPED ±¸Á¶Ã¼¸¦ ¸Å°³ º¯¼ö·Î Àü´ÞÇÏ¿© WSARecv()/WSASend() ¸¦ È£ÃâÇÑ´Ù.
- À̺¥Æ® ¹è¿¿¡ ´ëÇÏ¿© WSAWaitForMultipleEvents() ¸¦ È£ÃâÇÏ¿© I/O ÀÛ¾÷ÀÌ ¿Ï·áµÇ±â¸¦ ±â´Ù¸°´Ù.
- I/O ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é WSAGetOverlappedResult() ¸¦ È£ÃâÇÏ¿© °á°ú¸¦ È®ÀÎÇÑ´Ù.
- WSAResetEvent() ¸¦ ÀÌ¿ëÇÏ¿© À̺¥Æ® ¿ÀºêÁ§Æ®ÀÇ »óŸ¦ ¸®¼Â½ÃŲ´Ù. ¿Ï·áµÈ I/O ÀÛ¾÷¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÑ´Ù.
- ´Ù¸¥ I/O ÀÛ¾÷À» WSARecv()/WSASend() È£ÃâÇÏ¿© ½ÃÀÛÇÑ´Ù.
- 5 ~ 8 ÀÇ °úÁ¤À» ¹Ýº¹ÇÑ´Ù.
8 ´Ù¿î·Îµå #