์ญ์ฌ๋ ์ด๋ ๊ฒ ๊ธฐ๋กํ ๊ฒ์ด๋ค. ์ด ์ฌํ์ ์ ํ๊ธฐ์ ์ต๋ ๋น๊ทน์ ์
ํ ์ฌ๋๋ค์ ๊ฑฐ์น ์์ฐ์ฑ์ด ์๋๋ผ, ์ ํ ์ฌ๋๋ค์ ์๋ฆ๋ผ์น๋ ์นจ๋ฌต์ด์๋ค๊ณ . โ๋งํด ๋ฃจํฐ ํน
๋ชฉ์ฐจ #
2 ์์ํ๋ฉฐ #
- ์ด ๊ฐ์ข๋ C/C++๊ณผ ๊ธฐ๋ณธ socketํจ์์ ๋ํ ์ง์, Win32 API์ ๋ํ ์ง์์ ์ฐ์ ์ผ๋ก ํฉ๋๋ค.
- Visual C++ 6.0์ ์ฌ์ฉํ๋ ๊ฒ์ ์์น์ผ๋ก ํฉ๋๋ค. (๋ญ, ๊ฐ์ข์์ ๊ทธ๋ ๊ฒ ํฐ๊ฐ ๋์ง ์์ต๋๋ค. ^^)
- ๋คํธ์ํฌ ์ฉ์ด์ ๋ํด์ ์ฝํ๋ค๊ณ ์๊ฐ๋์๋ ๋ถ์
์ฌํ์ญ์ ๋คํธ์ํฌ ๊ฐ๋
์ ๋ฆฌ๋ฅผ ํ๋ฒ ์์งํ์๊ธฐ ๋ฐ๋๋๋ค. ๋๋ฆ๋๋ก ์ ์ ๋ฆฌํ ์ฌ์ดํธ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
- ํ์ดํ ์ ์ฝ์ ์ํด ์กด๋๋ง์ ์๋ตํฉ๋๋ค.
์ดํด๋ฐ๋๋๋ค.
3 Overapped I/O๋ฅผ ์ ์ฌ์ฉํ์ง? #
- ์ฐ์ ๊ธฐ์กด ์์ผ ํจ์๋ ๋ณด๋ด๊ธฐ/๋ฐ๊ธฐ๋ฅผ ์ํํ๋๋ฐ ์์ด์ ๊ฐ๊ฐ์ ์ญํ ์ ๋๋ด๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ์ด๋ ๊ฐ๋จํ ์ฒ๋ฆฌ์๋ ๊ด์ฐฎ์ง๋ง ์กฐ๊ธ ํฌ๊ธฐ๊ฐ ํฐ ๋ฐ์ดํ๋ฅผ ์ ์กํ๋ค๊ฑฐ๋ ํด์ ์ ์ก์ด ๋๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ๊ฒ ๋ ๋ ๊ทธ ์ดํ ์ฒ๋ฆฌ๊ฐ ๋ฆ์ด์ง๊ฒ ๋๋ค. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ํ์์ด ๋ฐ์ํ๋ค. (์ด๋ฅผ blocking๋๋ค๊ณ ํํ ์๊ธฐํจ.)
SOCKET samplesock; char data[255]; ... recv(samplesock, (cahr *)data, 255); printf("%s", data); // ์ด ๋ถ๋ถ์ recv()๊ฐ ์คํ์ด ๋๋์ผ ์คํ๋๋ค. - ๋ฌผ๋ก , select(), WSAEventSelect(), WSAAsyncSelect()๋ฅผ ์ฌ์ฉํด์ ์์ ๋ฐ๊ธฐ/๋ณด๋ด๊ธฐ๊ฐ ๊ฐ๋ฅํ ๋๋ง recv()/send()๋ฅผ ์คํํ๋ฉด ํด๊ฒฐ๋๋ ๋ถ๋ถ์ด์ง๋ง ์ด๊ฒ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ํด๊ฒฐ์ ์๋๋ค. ์์ผ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค ๋ณด๋ฉด ๋ณด๋ด๊ธฐ/๋ฐ๊ธฐ ์์
์์ ์งํ์ ์ด๋ค ์ผ์ ๋ฐ๋ก ์ํํ๋ฉด ์ข์ ๊ฒฝ์ฐ๊ฐ ์๊ฒ ๋ง๋ จ์ด๋ค. (ํนํ ์ ์์ ์์ data๊ฐ ์์ฃผ ํฌ๊ธฐ๊ฐ ํฌ๋ค๋ฉด printf()๋ฌธ์ด ์คํ๋๊ธฐ ์ ์๋ ๋จนํต์ด ๋ ๊ฒ์ฒ๋ผ ๋ง๋ฅ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ์ด๋ค.) ๊ทธ๋ฌ๋ฉด ๋ฐ๋ก Thread๋ฅผ ์ฌ์ฉํด์ ์ฝ๋ฉ์? ์ด๊ฒ๋ ๋๋ฌด ๋ถ๋ด์ค๋ฝ๋ค. (๋ฐ์ดํ ํ๋ ์ ์กํ๋๋ฐ ์ฐ๋ ๋์ฉ์ด๋...
)
- ๊ทธ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์ ์์ผ๋๊ณ ๋ค ๋ณด๋ด๊ฑฐ๋ ๋ฐ์์ง๋ฉด ์๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ข๊ฒ ๋ค...ํ๋ ์ค์ ๋ง๋ค์ด์ง ๊ฒ์ด ๋ฐ๋ก Overlapped I/O์ด๋ค. ์ฆ, ์ด๊ฒ์ ์ฐ์ ๋ณด๋ด๊ธฐ/๋ฐ๊ธฐ๋ฅผ ์คํํ๋๋ก ์ํค๊ณ ๋ฐ๋ก ๋ค์ ๋ช ๋ น์ ์คํํ๋ฉฐ, ๊ทธ ์คํ์ด ์๋ฃ๋๋ฉด 3๊ฐ์ง ๋ฐฉ๋ฒ์ค ํ๋๋ฅผ ํํด ์ํ์ด ์ข ๋ฃ๋์๋์ง๋ฅผ ํ์ ํ๊ณ ๊ทธ ๋ค์ ๋ช ๋ น์ ์ํํ ์ ์๋ ์์คํ ์ธ ๊ฒ์ด๋ค.
4 ์ ์ฉ๋๋ ํจ์๋ค #
- ๋ฐ๋์ Winsock2 ๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผํ๋ค. (๋ญ, ์ด์งํผ ์ฐ๋ฆฌ๊ฐ ํญ์ ์ฌ์ฉํ๋ ์ต๊ทผ๋ฒ์ ผ์ ์์ผํจ์๋ค. WSA...์ด์ฉ๊ตฌ ํจ์๋ค์ Winsock2 ์ ์ฉํจ์๋ค์ด๋ค.)
- WSARecv(),WSASend(),WSARecvFrom(),WSASendTo()๊ฐ ๋ฐ๋ก ์ค๋ฒ๋ฉ๋์ ์ถ๋ ฅ์ด ์ง์๋๋ ํจ์๋ค์ด๋ค. ๋ฌผ๋ก ReadFile(), WriteFile()ํจ์๋ค์๋ ์ ์ฉํ ์ ์์ง๋ง, ์ฌ๊ธฐ์๋ ์์ผ๋ง ์๊ธฐํ๋๋ก ํ๊ฒ ๋ค. (MSDN์ ์ฝ์ด๋ณด๋ฉด ์๋ง๋ ReadFile(), WriteFile()์ ๋ํด ์ธ๊ธ์ด ๋์ด์๋ค)
- ๋์น์ฑ๊ฒ ์ง๋ง, ๊ฐ๊ฐ์ ํจ์์ ์ญํ ์ ์๋์ ๊ฐ๋ค.
WSARecv() TCP,๋ฐ๊ธฐ WSARecvFrom() UDP,๋ฐ๊ธฐ WSASend() TCP,๋ณด๋ด๊ธฐ WSASendTo() UDP,๋ณด๋ด๊ธฐ
4.1 ์คํ์ #
- ์, ์ฐ์ ์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ๋ณด์. ์ผ๋ฐ์ ์ผ๋ก TCP์์ ๋ฐ๊ธฐ์ ์ด ๊ธฐ๋ฅ์ด ๋ง์ด ์ฐ์ด๋ฏ๋ก WSARecv()์ ๋ํ ์๋ฅผ ๋ค๊ฒ ๋ค. ๋ค์ ํจ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก recv()๊ธฐ๋ฅ์ ์ํํ๋ ๊ฐ๋จํ ์์ด๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด์๋ค๊ณ ๊ฐ์ ํ์.
char *recvBuf; // ๋ฐ์ ์์ ๋ฒํผ int recvBufLen; // ๋ฒํผ ํฌ๊ธฐ SOCKET sock; // ์์ผ ํธ๋ค
์ด๋ ๊ฒ ์ ์ธ๋์ด์๋ค๋ฉด ์ผ๋ฐ์ ์ธ recv()๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.recv(sock, (char *)recvBuf, recvBufLen, 0);
์. ๊ฐ๋จํ ํ ์ค๋ก ๋๋๋ค.
ํ์ง๋ง WSARecv()๋ ์ด๋ค์ง ๋ณด์.
WSAOVERLAPPED wo; memset(&wo, 0, sizeof(WSAOVERLAPPED)); wo.hEvent = WSACreateEvent(); WSABUF tBuf; tBuf.len = recvBuflen; tBuf.buf = recvBuf; DWORD tRecvLen; DWORD tFlag = 0; WSARecv(sock, &tBuf, 1, &tRecvLen, &tFlag, &wo, NULL);
ํ๊ฑฐ๋ฉ. ์ฝ๊ฐ ๋ณต์กํ๊ตฐ. ์ ๋ฌธ์ฅ๋ค์ ๊ฐ๋จํ ์๋ฏธ๋, ์ผ๋จ tBuf์ ๋ฑ๋กํ ๋ฉ๋ชจ๋ฆฌ์ sock์ผ๋ก ๋๊ฒจ์ ธ์ค๋ ๋ฐ์ดํ๋ฅผ ๋ชจ๋ ๋ด๊ณ ๋ค ๋ด์์ง๋ฉด wo.hEvent์ ์ค์ ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์๊ทธ๋ํด์ค๋ผ๋ ์๋ฏธ์ด๋ค.
- ์์ ๋ ๋ฐ๊ธฐ ์์ ์ ์คํ์์ ์ฐจ์ด๋ recv()๋ ๋ค ๋ฐ์์ง๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ํํธ, WSARecv() ์คํ์ฆ์ ๋ค์ ๋ช ๋ น์ ์คํํ๋ค๋ ๊ฒ์ด๋ค. ๋ค์ ํ๋ฒ ๋งํ์ง๋ง, ๋ง์ผ ๋ค ๋ฐ์๋๊น์ง ์๋ฌด์ผ๋ ์ํ๊ณ ๋ง๋ฅ ๊ธฐ๋ค๋ ค๋ ๋๋ค๋ฉด Overlapped I/O๋ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
5 MSDN ๋ฒ์ญ - Overlapped I/O ๊ฐ์ ๋ฐ ์์ฝ #
Overlapped I/O๋ Win32 ์์คํ
๋ด์์ ์ค์น๋ ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ฉฐ, ๋จ์ง WSA_FLAG_OVERLAPPED ์ต์
์ ๊ฐ์ง WSASocket ํจ์๋ฅผ ํตํ์ฌ ์์ฑ๋ ์์ผ๋ค๋ง ์คํ๋ ์ ์์ต๋๋ค.
Overlapped์์ฑ์ ๊ฐ์ง ์์ผ์ ์์ฑํ๋ ๊ฒ์ ์์ผ์ด blocking์ด๋ nonblocking์ด๋์ ์ฌ๋ถ์ ๋ํด์๋ ์ํฅ์ด ์์ต๋๋ค. Overlapped ์์ฑ์ ๊ฐ์ง๊ณ ์์ฑ๋ ์์ผ๋ค์ ์์ผ์ ๋ธ๋กํน ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ๋ ์ผ์์ด Overlapped I/O๋ฅผ ์คํํ๋๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. Overlapped I/O ๊ธฐ๋ฅ์ด ๋ธ๋ก๋์ง ์๋ ๊น๋ญ์, ์์ผ์ ๋ธ๋กํน ๋ชจ๋๋ ์ด ์๋๊ณผ๋ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ฐ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์, ๋์ฐฉํ๊ฒ ๋ ๋ฐ์ดํ๋ค์ด ๋ด๊ธธ ๋ฒํผ๋ค์ ์ ๊ณตํ๊ธฐ์ํด WSARecv์ WSARecvFrom ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋คํธ์ํฌ์ ์ํด ๋์ฐฉํ๊ฒ ๋๋ ์๊ฐ๋ณด๋ค ์์์ ํ๊ฐ์ด์์ ๋ฒํผ๋ค์ด ํต๋ณด๋๋ฉด, ๋์ฐฉํ๋ ๊ฒ๊ณผ ๋์์ ์ฆ์ ์ฌ์ฉ์์ ๋ฒํผ๋ค์ ๋ฐ์ดํ๊ฐ ๋ด๊ธฐ๊ฒ ๋ ๊ฒ ์
๋๋ค. ๋ฐ๋ผ์, ๋ค๋ฅธ ํํธ์ผ๋ก recv์ recvfromํจ์๊ฐ ๋ฐ๋๋์ด ์ผ์ด๋ ์ ์๋ ๋ณต์ฌ ์์
์ ํผํ ์ ์๋๋ก ํฉ๋๋ค. ๋ง์ผ ๋ฒํผ๊ฐ ํต๋ณด๋๊ธฐ ์ ์ ๋ฐ์ดํ๊ฐ ์กด์ฌํ๋ค๋ฉด, ๋ฐ์ดํ๋ ์ฆ์ ์ฌ์ฉ์์ ๋ฒํผ๋ค๋ก ๋ณต์ฌ๋ฉ๋๋ค.
๋ง์ผ ๋ฐ๊ธฐ์ ์ฉ ๋ฒํผ๊ฐ ๊ณตํ๋์ง ์์ ์ํ์์ ๋ฐ์ดํ๊ฐ ๋์ฐฉํ์ ๊ฒฝ์ฐ, ๋คํธ์ํฌ๋ ๋ฐ๊ธฐ ๋ช
๋ น์ ์น์ํ ๋๊ธฐํ ์คํ์ผ์ ์์กดํฉ๋๋ค. ์ ํํ ๋งํ๋ฉด, ๋ค์ด์ค๋ ๋ฐ์ดํ๋ ํ๋ก๊ทธ๋จ์์ ๋ฐ๊ธฐ๋ช
๋ น์ ํธ์ถํ๊ณ ๊ทธ๊ฒ์ ์ํด์ ๋ฐ์ดํ๊ฐ ๋ณต์ฌ๋ ๋ฒํผ๊ฐ ์ ๊ณต๋ ๋๊น์ง ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ์ ๋ด๊ธฐ๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ์ ์์ธ๋ ํ๋ก๊ทธ๋จ์ด setsockoptํจ์๋ฅผ ์ฌ์ฉํด์ ํด๋น ์์ผ์ ๋ฐ๊ธฐ ๋ฒํผ๋ฅผ 0์ผ๋ก ์ง์ ํ์ ๊ฒฝ์ฐ์
๋๋ค. ์ด ๊ฒฝ์ฐ์๋, TCP์ผ ๊ฒฝ์ฐ๋ ํ๋ก๊ทธ๋จ์ ๋ฒํผ๋ค์ด ํต๋ณด๋์์ ์๊ฐ์๋ง ๋จ์ง ๋ฐ์ดํ๋ฅผ ๋ฐ๊ฒ ๋ ๊ฒ์ด๊ณ (๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ ๋๊ธฐ์ํ์), UDP์ผ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํ๋ฅผ ์๊ฒ ๋ฉ๋๋ค.
๋ณด๋ผ ๋์ ๊ฒฝ์ฐ์์๋ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํ๊ฐ ๋ด๊ธด ๋ฒํผ๋ค์ ํฌ์ธํฐ๋ฅผ ์ ๊ณตํ๊ณ ๋คํธ์ํฌ๊ฐ ๋ฒํผ์ ๋ด์ฉ๋ค์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ผ ๋๊น์ง ์ด๋ค ๊ฒฝ๋ก๋ ์ง ๋ฒํผ๋ค์ ๊ดด๋กญํ๋ ๊ฒ์ ๋ง๊ธฐ์ํด WSASend์ WSASendTo ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Overapped๋ send/receive ํธ์ถ์ ์ฆ์ ๋ฐํ๋ฉ๋๋ค. ๋ฐํ๊ฐ์ ์ฆ์ ๋ชจ๋ ์
์ถ๋ ฅ ์ฒ๋ฆฌ๊ฐ ๋๋ฌ์ ๊ฒฝ์ฐ์๋ 0์ด ๋๊ณ , ๊ทธ์ ๋ฐ๋ฅธ completion ์ ํธ๊ฐ ์ฆ์ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ ํํ ๋งํ๋ฉด, ์ฐ๊ด๋์ด์๋ event ๊ฐ์ฒด๊ฐ ์๊ทธ๋๋๊ฑฐ๋ completion routine์ด ํ์ ์ ์ฌ๋๊ณ , ํธ์ถํ ์ฐ๋๋๊ฐ ๊ฒฝ๊ณ ๊ฐ๋ฅํ ๋๊ธฐ์ํ๊ฐ ๋ ๋ ์คํ๋ ๊ฒ ์
๋๋ค.
WSA_IO_PENDING ์๋ฌ์ฝ๋์ ๊ฐ์ด ๋์ด์ค๋ SOCKET_ERROR๊ฐ ๋ฐํ๊ฐ์ผ ๊ฒฝ์ฐ, ์ด๊ฒ์ Overlapped ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ด๊ธฐํ ๋๊ณ , ์ ์ก์ค์ด๊ฑฐ๋ ์ ์ก์ด ๋๋ ๋์ ์ ๊ณต๋๋ ๋ถ์์ ์ธ ์ ํธ๊ฐ ์ ๊ณต๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด์จ๊ฑฐ๋, streamํ์์ ์์ผ์์ Completion ์ ํธ๋ ๋ฒํผ๋ค์ด ๊ฐ๋ ์ฐจ๋ ๊ฒ๊ณผ๋ ๊ด๊ณ์์ด ๋ค์ด์ค๋ ๋ฐ์ดํ๊ฐ ๊ณ ๊ฐ๋ ๋๋ง๋ค ๋ฐ์ํฉ๋๋ค. ์์ ๋ค๋ฅธ ๋๋จธ์ง ์๋ฌ์ฝ๋๋ Overlapped ์ ํธ๊ฐ ์ด๊ธฐํ๋์ง ์์์ผ๋ฉฐ, Completed ์ ํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ณด๋ด๊ธฐ์ ๋ฐ๊ธฐ ์ฒ๋ฆฌ ๋๋ค Overlapped ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๊ธฐ ํจ์๋ค์ ๋ค์ด์ค๋ ๋ฐ์ดํ์ ๋๋นํ๊ธฐ ์ํ ๋ฐ๊ธฐ์ฉ ๋ฒํผ๋ค์ ํต๋ณดํ๊ธฐ ์ํด ์ฌ๋ฌ๋ฒ ํธ์ถ๋ ์ ์์ผ๋ฉฐ, ๋ณด๋ด๊ธฐ ํจ์๋ค์ ๋ณด๋ด๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฌ๋ฌ๊ฐ์ ๋ฒํผ๋ค์ ํ์ ๋ฑ๋กํ๊ธฐ ์ํด ์ฌ๋ฌ๋ฒ ํธ์ถ๋ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ด ์ง์ ๋ ์์๋๋ก ๋ณด๋ด์ง๊ณ ์๋ Overlapped ์ค์ ๋ ๋ณด๋ด๊ธฐ์ฉ ๋ฒํผ๋ค์ ์งํฉ์ ์์งํ ์ ์์ ๋์, ๊ทธ์ ๋ฐ๋ผ์ค๋ Completion ์ ํธ๋ ๋ค๋ฅธ ์์๋ก ๋ฐ์ํ ์๋ ์์ต๋๋ค. ๋น์ทํ๊ฒ๋, ๋ฐ๋ ์ฒ๋ฆฌ์ ์
์ฅ์์๋ ๋ฒํผ๋ค์ ์ ๊ณต๋ ์์๋๋ก ์ฑ์์ง ์ ์์ง๋ง, Completion ์ ํธ๋ ๋ค๋ฅธ ์์๋๋ก ์ฌ ์ ์์ต๋๋ค.
ํด๋น ์ฐ๋ ๋ ์์์์ ์ฌ๋ฌ๊ฐ์ Completion ์ ํธ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด์๋ ์๋ฌด ์ญํ ๋ ํ์ง ์๋ ๋๋ฏธ Event ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด ๊ฐ์ฒด์ bAlert๊ฐ true์ธ WSAWaitForMultipleEvents ํจ์๋ฅผ ์คํ์์ผ ํ์ฌ ์ฐ๋ ๋์ Overlapped I/O์ค ์ ์ด๋ ํ๋๊ฐ Completion๋์๋ค๋ ๊ฒ์ ๊ฐ์งํฉ๋๋ค. ์ ํจ์๋ SleepEx ํจ์๋ก ๋์ฒดํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. (๊ฐ์ ์ญํ ์
๋๋ค)
WSAWaitForMultipleEvents์ SleepEx ํจ์๋ ๊ทธ์ ์ข
๋ฃ์ฌ๋ถ๋ฅผ ๋ํ๋ผ ๋ฟ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๋์ง ์ฌ๋ถ๋ ์์ ์์ต๋๋ค. Overapped I/O ์ฒ๋ฆฌ๊ฐ ์ ์์ ์ผ๋ก ๋๋ฌ๋์ง ์ฌ๋ถ๋ WSAGetOverlappedResult ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์๋
๋๋ค.
์ฃผ์ด์ง ์์ผ์ ๋๊ธฐํ๊ณ ์๋ ๊ฐ๋ณ์ ์ธ Overlapped ๋ช
๋ น์ ์ทจ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง closesocket ํจ์๋ ์์ผ์ ๋ซ๋๋ก ๋ช
๋ นํ ์ ์๊ณ , ๋ชจ๋ ๋๊ธฐ์ค์ธ ๋ช
๋ น๋ค์ ์ฆ์ ์ทจ์ํ๋๋ก ๋ง๋ญ๋๋ค. Overlapped I/O์ ์ถ๊ฐ Completion ์ค์ ๋ค์ WSAIoctl ํจ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฅํฉ๋๋ค.
๋ค์์ Overlapped I/O์ ๋๊ฐ์ง์ ํํ์ ๋ํด ์ค๋ช
ํ ๋ถ๋ถ์
๋๋ค. (hEvent๋ lpOverlapped ๊ตฌ์กฐ์ฒด์ ์ค์ ํ๋ event ๊ฐ์ฒด์ ํธ๋ค๊ฐ์ ์๋ฏธํฉ๋๋ค.)
| lpOverlapped | hEvent | lpCompletionRoutine | Completion ์ฌ๋ถ ์๋ณ |
| NULL | ๋น์ฐํ ์ ํ ๋ถ๊ฐ๋ฅ | ๋ฌด์๋จ | ๋๊ธฐ์ ์ผ๋ก ์คํ๋จ. (๊ธฐ๋ณธ socketํจ์์ ๋์ผ) |
| NULL์๋ | NULL | NULL | Overapped์ํ๋ก ๋์. ํ์ง๋ง ์๋ฃ์ฌ๋ถ์ฑํฌ๋ถ๊ฐ๋ฅ |
| NULL์๋ | NULL์๋ | NULL | Overapped์ํ๋ก ๋์. ์๋ฃ์ฌ๋ถ๋ Event ๊ฐ์ฒด๋ก ์ฑํฌ. |
| NULL์๋ | ๋ฌด์๋จ | NULL์ด ์๋ | Overapped์ํ๋ก ๋์. ์๋ฃ์ฌ๋ถ๋ completion routine์ ํตํด์ ๊ด๋ฆฌ. |









