- tcp socket์ ์ด์ฉ
- fork๋ก ํ๋ก์ธ์ค ์์ฑ (์ฌ๋ฌ client์ ๋์์ ํต์ ํ๊ธฐ ์ํด์)
- client ์ชฝ์์ fin์ ๋ณด๋ด๋ ๊ตฌ์กฐ
- backlog queue size == 5
- ์๋ฒ๋ while-loop์ผ๋ก accept์ ๊ณ์ํด์ ์ํ
- signal handling์ผ๋ก zombie process reap
client : serv_sock (1๊ฐ) server : serv_sock(listening, 1๊ฐ), clnt_sock(read write, 1๊ฐ)
- ์ฌ๋ฌ client์ ํต์ ์ ์ํด fork๋ฅผ ํ๋ฉด, server์ clnt_sock ํ๋์ฉ ์์ฑ.
- ๋ถ๋ชจ์์์ ํ๋ก์ธ์ค์์ ๋ชจ๋ close ํด์ฃผ์ด์ผ fin์ด ์ ์์ ์ผ๋ก ์ํ
- server ๋จผ์ ์ผ๋๊ธฐ ex) ./server 9190
- client๋ก ์ ์ ex) ./client 127.0.0.1 9190
- client๊ฐ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ฉด ์๋ฒ๋ ๊ทธ๋๋ก ๋ฐ์ฌํด์ ๋ณด๋ด์ค
- client์์ q or Q์ ๋๋ฅด๋ฉด close -> fin
- server๋ ์ฌ๋ฌ client๋ฅผ ๋์์ ์์ฉ ๊ฐ๋ฅ (n:1)
- client's process : 1๊ฐ
- server's parent process : while-loop ์ํํ๋ฉฐ accept + clnt_sock close
- server's child process : echo ์ํ + serv_sock close
- client๊ฐ connect(syn)์ ํ๋ฉด, server๋ accept ๋ฐ fork๋ก child process ์์ฑ
- server's child process : file descriptor ๋ณต์ฌ๋ก ์ธํด listening socket ๋ฏธ๋ฆฌ ์ข ๋ฃ // server's serv_sock close -1
- server's parent process : server's clnt_sock close -1 // ๋ณต์ ๋๊ธฐ ๋๋ฌธ์ ์ข ๋ฃํด์ฃผ๊ธฐ
- server's child process๋ ๋ณต์ ๋ serv_sock file descriptor๋ฅผ close
- server's child process๋ echo ์ญํ ์ํ
- client's process : close : q or Q ๋ฅผ ์ณ์ ์ข ๋ฃ์์ฒญ ์ํ // client's serv_sock close
- server's child process : server๋ read์ 0์ด ๋ค์ด์ค๋ ๊ฒ์ ๋ณด๊ณ , fin์ detect ํ, server's clnt_sock close -2, ๊ทธ๋ฆฌ๊ณ ์์ ํ๋ก์ธ์ค ์ข ๋ฃ
- server's child process ์ข ๋ฃ ์ํค๋ฉด singal handler called
- singal handler : zombie process ์์ฑ์ ๋ง๊ธฐ ์ํด waitpid๋ก reap
- server๋ while-loop ์ ํตํด ๊ณ์ํด์ client์ ์์ฒญ์ accept (block ํจ์)
ps al ์ปค๋งจ๋๋ก ํ์ธํด๋ณด๋ฉด multi-process server์์ reaping ํด์ฃผ์ง ์๋๋ค๋ฉด zombie process๊ฐ ๋จ๊ฒ ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ wait or waitpid ๊ฐ์ ํจ์๋ก ์์์ reaping์ ํด์ฃผ์ด์ผ ํ๋ค. ์๋๋ฉด ์ข๋น ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์์ด๊ฒ ๋๋ค. ๋ฌผ๋ก ์๋ฒ๊ฐ down๋๋ฉด zombie ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง๋ง, ์ค์ ์๋ฒ๋ ์ ๋ง์ client๋ฅผ ์๋๋ก ๊ณ์ํด์ ๋์๊ฐ์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ zombie process๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ํ์ง ์๋๋ก reaping ํด์ฃผ๋ ๊ฒ์ ๊ผญ ํ์ํ๋ค.
์ค์ 3๊ฐ์ client๋ฅผ ๋์์ ์ ์์ํจ ํ ํ ๋น๋ tcp port๋ค.
server -> 1 : listening socket n : clnt_sock(์ด ์์ผ์ผ๋ก client์ ํต์ ํ๋ค.) client -> n : ๋จ์ผ ํ๋ก์ธ์ค๋ก ์๋ฒ์๊ฒ ์ ์ํ๋ค. n๋ช ์ด๋ฉด n๊ฐ.
์์ฆ์ multi-thread ํ๊ฒฝ์ ์๋ฒ๊ฐ ๋๋ถ๋ถ์ด์ง๋ง, multi-process ํ๊ฒฝ์์ ์๋ฒ๊ฐ ๋ง์ client๋ฅผ ์์ฉํ๋ ๊ณผ์ ์ ์๊ฐํด ๋ณด๊ฒ ๋์๋ค. ์๋ฒ์ ํน์ฑ ์ 24์๊ฐ ๋ด๋ด ๋์๊ฐ์ผ ํ๋ฉฐ, zombie process ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ด๋ฆฌ๋ฅผ ์ ํด์ฃผ์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
