Webserv_socket
- select๋ I/O multiplexingํจ์๋ก, block/non-block๊ณผ๋ ์๊ด ์๋ค.
- I/O multiplexingํจ์๋ ์์ผ ๊ด๋ จ ํจ์๋ฅผ ํธ์ถํ ๋, ์ฑ๊ณตํ ์์ ์ผ๋ก ๋๊ธฐํ?๋ธ๋ญ? ์์ผ์ฃผ๋ ํจ์์ด๋ค.
- block์์ผ, ๊ด๋ จ ํจ์ : blocking๋๋๊ฑธ ๋ง์์ค
- non-block์์ผ, ๊ด๋ จ ํจ์ : WOULDBLOCK๊ฐ์ ์ฌ์ฐจ ํ์ธํด์ผํ๋ ์๋ฌ ๋ฐ์์ ๋ง๋๋ค.
- read set์ fd๋ค์ ๋ฑ๋กํ๊ณ , select๊ฐ ๋ฐํ์ ํ๋ฉด read set์๋ ์ฝ๊ธฐ ๊ฐ๋ฅํ fd๋ค๋ง ๋จ๊ณ , ๋๋จธ์ง๋ ์ฌ๋ผ์ง๋ค.
- fd๊ฐ ์ฌ๋ผ์ก๋์ง, ๋จ์์๋์ง ํ์ธํ๋๊ฒ FD_ISSET๋ฉํฌ๋ก์ด๋ค.
- read๊ฐ๋ฅํ๋ ์์ผ์ ์ฒ๋ฆฌ๊ฐ ๋๋๋ fd_set์ ๋จ์ ์์ผ๋, fd_set์ 0์ผ๋ก ์ด๊ธฐํ(FD_ZERO) ์์ผ์ค์ผํํ๋ค.
- fd_set์ ๋งค๋ฒ ์๋ก ๋ฑ๋ก ํด์ฃผ์ด์ผ ํ๋ค(FD_SET).
- listen์์ผ์ read set์ ๋ฑ๋กํ๋ค.
- listen์์ผ์ด read set์ ์์ผ๋ฉด acceptํ์ฌ ํด๋ผ ์ ๋ณด๋ฅผ ๋ฐ์์ค๊ณ ์ธ์ ์ ์ถ๊ฐ.
- ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
- ๋ณดํต fd์ buffer, recvbyte, sendbyte๊ฐ ์๋คโฆ
- ๋น๋๊ธฐ์์ recvํ ๋, ์๋๋ฐฉ ์์ ๋ฒํผ์ ๋ฌธ์ฌ ๋๋ฌธ์ ์๋๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง ๋์ฐฉ ํ ์ ์๋ค
- ์ปค๋๋จ์์ ๋๋๋ก์ด๋ฉด ํ๋ฒ์ ๋ณด๋ด๋ ค๊ณ ํด์ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์๋.
- TCP์์ผํต์ ์, stream ํน์ฑ์ recvํ ๋, ๋ฐ์ดํฐ๊ฐ ์ฐ๋ฌ์์ ์ฌ ์ ์๋ค.
- 10byte, 5byte๊ฐ๊ฐ ํ๋ฒ์ ์์ recv์ 15btye๋ก ์ฝํ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ, ์ผ๋จ ๋ฒํผ์ ๋ค ์ฎ๊ธฐ๊ณ ํค๋๋ฅผ ์ฝ์ด์ ์ ์ฒด ํค๋์ ๋ฐ๋์ ํฌ๊ธฐ๋ฅผ ํ์ ํ์ฌ ์๋ฅธ๋ค.
- ๋จ์ : fd_set์ ํฌ๊ธฐ๊ฐ ์ ํ์ ์(๋ฐฐ์ด ํํ๋ก ๋นํธ๋ง์คํน์ ์ฌ์ฉํ๊ณ ์์ด์โฆ). fd_set์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด์ ๋๋ ค๋ ๋์ง๋งโฆ
์ธ์ :
์ฐธ๊ณ : ํน์ ์์ผ๋ง ์ ๊ฑฐํ๋๊ฑด FD_CLR