Linux๋กœ ์‹œ์ž‘ํ•ด๋ณด๋Š” ๊ฐ„๋‹จํ•œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฐ˜์‘ํ˜•

์•„์ง ์†Œ์ผ“์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๊ตฌ์š”?

์•„๋ž˜์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ Socket ํฌ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ - Socket


BSD Unix Socket ๊ตฌ์„ฑ

์œ ๋‹‰์Šค์—์„œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ๋Š” ํŒŒ์ผ๋กœ ํ•˜์—ฌ๊ธˆ ํ†ต์‹ ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์œ ๋‹‰์Šค์˜ ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ์€ ํŒŒ์ผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ์œ ๋‹‰์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ read, write ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.


์‹ค์ œ Unix Programming์—์„œ ํŒŒ์ผ์„ ์ƒˆ๋กœ ์—ด ๋•Œ, open ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. open ํ•จ์ˆ˜๋Š” int ํ˜• ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ด ๋ฐ˜ํ™˜ ๊ฐ’์€ File descripter Index์ž…๋‹ˆ๋‹ค. 


์ด๋ฏธ์ง€ ์ถœ์ฒ˜: (ํ•œ๊ตญ์†Œํ”„ํŠธ์›จ์–ด์ง„ํฅ์› ์ €, Network Programming)


์œ ๋‹‰์Šค์—์„œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๊ฒฝ์šฐ, ํŒŒ์ผ์„ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์œ ๋‹‰์Šค์—์„œ ๋ชจ๋“  ํŒŒ์ผ, ํ•˜๋“œ์›จ์–ด, ํŒŒ์ดํ”„, ์†Œ์ผ“ ๋“ฑ์„ ์ „๋ถ€ ํŒŒ์ผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ํ„ฐ๋ฏธ๋„ ์‚ฌ์ง„์„ ๋ณด๋ฉด, ์œ ๋‹‰์Šค๋Š” ํ•˜๋“œ์›จ์–ด ๋“ฑ์„ ๋ชจ๋‘ ํŒŒ์ผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์œ„ ์‚ฌ์ง„์€ ์‹ค์ œ Linux์—์„œ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ์˜์—ญ์„ ๋‹ด๊ณ  ์žˆ๋Š” sda* ๋ถ€๋ถ„์€ SSD์™€ HDD์— ๋Œ€ํ•œ ์ •๋ณด๋กœ, ์ด ๋ชจ๋‘ ํŒŒ์ผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋งˆ์šดํŠธ ์ง€์ ์„ ํ†ตํ•ด ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


์†Œ์ผ“ ์—ญ์‹œ, ์ด๋ ‡๊ฒŒ ํŒŒ์ผ๋กœ ์ „์†กํ•˜๊ณ  ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์— ์•ก์„ธ์Šค ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ์ž ๊น ์œ„์ชฝ์˜ ์‚ฌ์ง„์„ ํ†ตํ•ด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


์šฐ๋ฆฌ๊ฐ€ C Language ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํ†ตํ•ด์„œ ํŒŒ์ผ์— ์ ‘๊ทผ์„ ํ•˜๋ ค๋ฉด, ํŒŒ์ผ์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์ด ์–ด๋–ค ํŒŒ์ผ์ธ์ง€, ๋ฌด์Šจ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ๋ง์ด์ง€์š”. ์œ ๋‹‰์Šค์—์„œ๋Š” ์ด๋ฅผ C ์–ธ์–ด์˜ ๊ตฌ์กฐ์ฒด์— ํ• ๋‹น๋˜์–ด ๋‹ด๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๋ฐ”๋กœ ์ด ํ…Œ์ด๋ธ”์˜ Index๊ฐ’์ด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ž…๋‹ˆ๋‹ค.


์†Œ์ผ“๋„ ํŒŒ์ผ์ฒ˜๋Ÿผ ์ด๋Ÿฐ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๊ธฐ์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์†Œ์ผ“๋ฒˆํ˜ธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋žตํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ์†Œ์ผ“์„ ๊ฐœ์„คํ•˜์—ฌ ์–ป์€ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ด์ง€์š”. ์œ ๋‹‰์Šค์—์„œ๋Š” ์†Œ์ผ“๋„ ํŒŒ์ผ๋กœ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹น์—ฐํžˆ ์†Œ์ผ“์—์„œ๋„ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.



์†Œ์ผ“ ์ƒ์„ฑ ์ค€๋น„

์†Œ์ผ“์„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ ์ „์—, ๋จผ์ € ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฒƒ์ด ํ•„์š”ํ•œ์ง€ ์–˜๊ธฐํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ˜ธ์ŠคํŠธ์—๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์‹๋ณ„์ž์ธ IP ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ํ˜ธ์ŠคํŠธ์—๋Š” ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋Ÿผ ํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹๋ณ„์ž ๋˜ํ•œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ๋Š” ์ด๋ฅผ PID(ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์žID)๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์ด๋ฅผ PID๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ , ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.


ํฌํŠธ๋ฒˆํ˜ธ๋Š” TCP/UDP ํŒจํ‚ท์— 16bit ํ˜•ํƒœ๋กœ ๊ฐ™์ด ์ €์žฅ๋˜์–ด ์ „์†กํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 1 ~ 65535๋ฒˆ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , TCP์™€ UDP๊ฐ€ ๊ฐ๊ฐ ๊ฐ™์€ ๋ฒˆํ˜ธ๋กœ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–˜๊ธฐ๋Š” ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ TCP์™€ UDP๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ง€์š”.


์ž ๊ทธ๋Ÿผ ์ด์ œ ์†Œ์ผ“์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์„ ์ „์ฒด์ ์œผ๋กœ ๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


- ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ (TCP, UDP)

- ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ

- ํด๋ผ์ด์–ธํŠธ ํฌํŠธ ๋ฒˆํ˜ธ

- ์„œ๋ฒ„ IP ์ฃผ์†Œ

- ์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ


์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋–„, ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ์—์„œ ์ž๋™์œผ๋กœ IP ์ฃผ์†Œ์™€, ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ๋–„๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ชฉ์ ์ง€์ธ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ๋งŒ ์•Œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



์†Œ์ผ“ ์ƒ์„ฑ

์ด์ œ ์†Œ์ผ“์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ค€๋น„๋ฌผ์€ ๋ชจ๋‘ ๊ฐ–์ถฐ์กŒ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์†Œ์ผ“์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€๋งŒ ์•Œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด, ๋‘ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ, ๋˜ ํ•˜๋‚˜๋Š” ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋‘˜์ด ์„œ๋กœ ํ†ต์‹ ์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋‘ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ๋‘ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋‘ socket ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒซ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๋จผ์ € ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž„์˜ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์˜ argument ๋ฒ”์œ„๋ฅผ 2๊ฐœ๋กœ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ ๊ณ , ํ•ด๋‹น ํฌํŠธ๋ฒˆํ˜ธ๋กœ ์„œ๋ฒ„๊ฐ€ ์—ด๋ฆฌ๋„๋ก ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์†Œ์ผ“์„ ์ƒ์„ฑํ•  ๋–„๋Š” socket() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. socket() ํ•จ์ˆ˜๋Š” Ubuntu Linux๋ฅผ ๊ธฐ์ค€์œผ๋กœ netinet/in.h ํŒŒ์ผ์„ include ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด if ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


socket ํ•จ์ˆ˜ ์ฒซ ์ธ์ž ๊ฐ’์—๋Š” PF_INET์ด๋ผ๋Š” ๋งคํฌ๋กœ ์ƒ์ˆ˜๋ฅผ ์ ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœํ† ์ฝœ ์ฒด๊ณ„๋กœ ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต IPv4 ์ฃผ์†Œ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ๋–„, ์ด ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. IPv6๋ฅผ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด PF_INET6์„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


SOCK_STREAM์— ๋“ค์–ด๊ฐ€๋Š” ์ธ์ž๋Š” ์„œ๋น„์Šค ํƒ€์ž…์„ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, TCP๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ƒ, UDP๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ƒ๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. SOCK_STREAM์„ ์‚ฌ์šฉํ•˜๋ฉด TCP, SOCK_DGRAM์„ ์‚ฌ์šฉํ•˜๋ฉด UDP์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ SOCK_RAW๋„ ์กด์žฌํ•˜์ง€๋งŒ, ์ด๋Š” TCP/UDP ๊ณ„์ธต์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ , ๋ฐ”๋กœ IP ๊ณ„์ธต์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹ค์ œ ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ TCP๋‚˜ UDP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ์ž ํ•˜๊ณ , ์ง์ ‘ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•  ๋–„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ธ‰ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.



์ธํ„ฐ๋„ท ์†Œ์ผ“ ์ฃผ์†Œ ์ƒ์„ฑ

์šฐ๋ฆฌ๋Š” ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด, ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ž์— ์†Œ์ผ“์—์„œ ์šฐ๋ฆฌ๋Š” ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์œผ๋‹ˆ ์ฃผ์†Œ ์ฒด๊ณ„๋„ ์ธํ„ฐ๋„ท ์†Œ์ผ“ ์ฃผ์†Œ ์ฒด๊ณ„๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ธํ„ฐ๋„ท ์ „์šฉ ์†Œ์ผ“ ์ฃผ์†Œ์ธ sockaddr_in ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.


sockaddr_in ๊ตฌ์กฐ์ฒด๋Š” 3๊ฐœ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. sin_family๋Š” ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ๋งŒ๋“  ์†Œ์ผ“์— ๋Œ€ํ•œ ์ฃผ์†Œ ์ฒด๊ณ„์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ํฌํŠธ๋ฒˆํ˜ธ์™€ IP ์ฃผ์†Œ์ธ๋ฐ, ์—ฌ๊ธฐ์„œ ์ €๋Š” IP ์ฃผ์†Œ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ , ์šด์˜์ฒด์ œ์—์„œ ์ฃผ์–ด์ง„ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด INADDR_ANY๋ผ ํ•˜๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋งคํฌ๋กœ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.



์†Œ์ผ“ ์‚ฌ์šฉ ์ ˆ์ฐจ

์ด์ œ๊นŒ์ง€๋Š” ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์ผ“์€ ์œ ๋‹‰์Šค์—์„œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ฒ˜๋Ÿผ ์†Œ์ผ“ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ผ๋Š” ๋˜‘๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฒƒ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ ์ด ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์€ ๋จผ์ € ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ตฌ๋™๋˜์–ด์•ผ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ์†Œ์ผ“ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†Œ์ผ“ ์ƒ์„ฑ๊นŒ์ง€ ๋งˆ์ณค๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ๋‹ค์Œ์ธ bind ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋‚˜์•„๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค. 


bind() ํ•จ์ˆ˜๋Š” ์†Œ์ผ“๋ฒˆํ˜ธ์™€ ์†Œ์ผ“์ฃผ์†Œ๋ฅผ ๋ฌถ์–ด ๋†“๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์†Œ์ผ“๋ฒˆํ˜ธ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ๋งŒ ์•Œ๊ณ  ์žˆ๊ณ , ์†Œ์ผ“์ฃผ์†Œ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ์•Œ๊ณ  ์žˆ๋Š” ์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋‘ ์Œ์„ ๋ฌถ์–ด์„œ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ํ‘œ๊ธฐํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์†Œ์ผ“๋ฒˆํ˜ธ์™€ ์†Œ์ผ“์ฃผ์†Œ๋ฅผ ๋ฌถ์–ด๋†“๊ธฐ ์œ„ํ•ด, ์†Œ์ผ“๋ฒˆํ˜ธ๋ฅผ ์ฒซ ๋ฒˆ์จฐ ์ธ์ž๊ฐ’์œผ๋กœ ์ฃผ๊ณ , ์ธํ„ฐ๋„ท ์†Œ์ผ“ ์ฃผ์†Œ๋Š” ๊ตฌ์กฐ์ฒด์ด๋ฏ€๋กœ ํฌ์ธํ„ฐ๋กœ ๋„˜๊น๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์†Œ์ผ“ ์ฃผ์†Œ ๊ตฌ์กฐ์ฒด์˜ ํฌ๊ธฐ๊นŒ์ง€ ๋„ฃ์–ด์ฃผ๋ฉด bind๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.


์ด์ œ ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด์ œ listen ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ธฐ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋Œ€๊ธฐ๋ชจ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ ํ˜ธ๋ฅผ ์ค„ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ•จ์ˆ˜๋กœ, ๋งˆ์น˜ ์†๋‹˜์ด ์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. listen ํ•จ์ˆ˜์—์„œ ๋งˆ์ง€๋ง‰ ์ธ์ž ๊ฐ’์€ ๋™์‹œ ์ ‘์† ํ—ˆ์šฉ ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ž…๋‹ˆ๋‹ค.


ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„๋Š” accept() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์†Œ์ผ“์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ณ ๋กœ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์—๋Š” 2๊ฐœ์˜ ์†Œ์ผ“์ด ํ•„์š”ํ•œ ๊ฒƒ์ด์ฃ . Listen์„ ์œ„ํ•œ ์†Œ์ผ“๊ณผ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ Accept๋ฅผ ์œ„ํ•œ ์†Œ์ผ“.


accept ์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋กœ, listen socket์€ ๊ณ„์† ๋‹ค์Œ ์—ฐ๊ฒฐ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด, ๊ตฌ๋™ ์ค‘์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์œ„์—์„œ ์ž…๋ ฅํ•œ 50061 ํฌํŠธ๋ฒˆํ˜ธ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. 


ํด๋ผ์ด์–ธํŠธ๋„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜์‹œ๋ฉด ์‰ฝ๊ฒŒ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ...

์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ์„œ์ ๊ณผ ์ž๋ฃŒ๋“ค์€ ๋งŽ์ด ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ์ ‘ํ•˜๊ธฐ๋„ ์–ด๋ ต๊ณ , ์‰ฝ์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ค‘์— ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ์šด์˜์ฒด์ œ์—์„œ ์ผ๋ถ€ ์ปค๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ์—์„œ IP ์ฃผ์†Œ ๋“ฑ์˜ ํ”„๋กœํ† ์ฝœ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํฌ์ŠคํŠธ๋Š” ์˜ˆ์ „๋ถ€ํ„ฐ ๊ณ„ํšํ–ˆ๋˜ ๊ฒƒ์ด์ง€๋งŒ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ์ข‹์„์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ ๋ฏผํ•œ ๋์— ์ด์ œ์„œ์•ผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์ œ๊ฐ€ ์•ž์œผ๋กœ ์ฝ”๋”ฉํ•˜๊ฒŒ ๋  ํŒŒํŠธ๋„ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋น„์ค‘์ด ๋†’์•„์ง€๋ฉด์„œ, ์ ์  ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žฌ๋ฏธ๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŠธ๋Š” ์“ฐ๋ ˆ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments