๐ ๋คํธ์ํฌํ๋ก๊ทธ๋๋ฐ 9์ฅ ์ ๋ฆฌ
์์ผ์ ๋ค์ํ ์ต์
์์ผ ์ต์ ์ ์ข ๋ฅ
Protocol Level | ์์ | ์ค๋ช |
---|---|---|
SOL_SOCKET | SO_RCVBUF, SO_REUSEADDR | ์์ผ์ ๊ธฐ๋ณธ ์ค์ (๋ฒํผ, ์ฌ์ฌ์ฉ ๋ฑ) |
IPPROTO_IP | IP_TTL ๋ฑ | IP ๊ณ์ธต ๊ด๋ จ ์ต์ |
IPPROTO_TCP | TCP_NODELAY | TCP ์ ์ฉ ์ค์ ์ต์ |
์ต์ ์ ๋ค๋ฃจ๋ ํจ์๋ค
getsockopt() : ์ต์ ์ ๋ณด ์ฐธ์กฐ (์ต์ ๊ฐ ์ฝ๊ธฐ)
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
// Protocol Level, Option Name์ด ํด๋น ์ต์
์ ๋ฑ๋ก ์ ๋ณด๋ฅผ ์ป์ด์ด
setsockopt() : ์ต์ ์ ๋ณด ์ค์ (์ต์ ๊ฐ ์ค์ )
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t *optlen);
// Protocol Level, Option Name์ด ํด๋น ์ต์
์ ๋ฑ๋ก ์ ๋ณด๋ฅผ ๋ณ๊ฒฝ
์์ผ์ ํ์ ์ ๋ณด (TCP or UDP)์ ํ์ธ
์์ผ์ ํ์
์ ๋ณด๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅ -> ์ต์
SO_TYPE์ ํ์ธ ๊ฐ๋ฅ
์์ผ์ ์ ์ถ๋ ฅ ๋ฒํผ ํฌ๊ธฐ ํ์ธ
SO_SNDBUF : ์ ๋ ฅ๋ฒํผ ํฌ๊ธฐ ํ์ธ/๋ณ๊ฒฝ
SO_RCVBUF : ์ถ๋ ฅ๋ฒํผ ํฌ๊ธฐ ํ์ธ/๋ณ๊ฒฝ
SO_REUSEADDR (ํฌํธ ์ฌํ์ฉ ํ์ฉ)
Time-wait TCP ์์ผ์์ ์ฐ๊ฒฐ ์ข ๋ฃ๋ฅผ ๋ชฉ์ ์ผ๋ก Time-wait ์ํ๋ฅผ ๊ฑฐ์นจ
Time-wait ์ํ๋์ ํด๋น ์์ผ ์๋ฉธx -> ํ ๋น๋ฐ์ Port๋ฅผ ๋ค๋ฅธ ์์ผ์ ํ ๋นx
์ค ์๋น์ค ์ค์ธ ๊ฒฝ์ฐ Port ํ ๋น์ด ๊ฐ๋ฅํ๊ฒ ์ฝ๋ ์์ ํด์ผํจ (setsockopt()์ฌ์ฉ)
// Port ํ ๋น์ด ๊ฐ๋ฅํ๋๋ก ์ต์
๋ณ๊ฒฝ
optlen = sizeof(option);
option = TRUE;
setsockopt(serv_sock, SOL_SOCK, SO_REUSEADDR, (void*)&option, optlen)
TCP_NODELAY
Nagle ์๊ณ ๋ฆฌ์ฆ : ์ธํฐ๋ท์ ๊ณผ๋ํ ํธ๋ ํฝ๊ณผ ๊ทธ๋ก์ธํ ์ ์ก์ ํ๋ฅผ ๋ง๊ธฐ์ํด ๋์์ธ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ชฉ์ ์ด ๋ช ํํ ๊ฒฝ์ฐ๊ฐ ์๋์์๋ ์ค๋จ x
- ์์ผ์ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ก์์ ๋ฐฉ๋ฒ
- ์์ ์ ์กํ ๋ฐ์ดํฐ์ ๋ํ ACK๊ฐ ์์ ๋์ด์ผ๋ง ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก