2021-03-17(Wed)

ν•­λͺ©

λ‚΄μš©

ν•™μŠ΅ λ‚ μ§œ

2021-03-17(수)

ν•™μŠ΅ μ‹œκ°„

11:00~24:00

ν•™μŠ΅ λ²”μœ„ 및 주제

socket, bind, listen, select, accept

ν•™μŠ΅ λͺ©ν‘œ

exam06을 톡과할 수 μžˆλ„λ‘ ν•™μŠ΅ν•œλ‹€.

λ™λ£Œ ν•™μŠ΅ 방법

-

상세 ν•™μŠ΅ λ‚΄μš©

μ„œλΈŒμ νŠΈλŠ” λλƒˆμ§€λ§Œ, λ°”λ‘œ μ΄μ–΄μ„œ ν•™μŠ΅ μ‹œμž‘ν–ˆλ‹€. exam06μ—μ„œ μš”κ΅¬ν•˜λŠ” IRC 간이 μ„œλ²„λ₯Ό λ°”λ‘œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ μ—°μŠ΅ν–ˆλ‹€.

image

일반적으둜 μ›Ήμ„œλ²„λŠ” μ•„λž˜ ν”Œλ‘œμš°λ₯Ό 따라간닀.

  1. socket을 λ§Œλ“ λ‹€. TCP/IPμ—μ„œλŠ” SOCK_STREAM을 μ‚¬μš©ν•œλ‹€.

  2. bind ν•¨μˆ˜λ‘œ socket에 server socket에 ν•„μš”ν•œ 정보(μ£Όμ†Œ, port 번호 λ“±)λ₯Ό ν• λ‹Ήν•˜κ³  컀널에 λ“±λ‘ν•œλ‹€. 이제 λ‹€λ₯Έ μ‹œμŠ€ν…œκ³Ό 톡신할 수 μžˆλŠ” μƒνƒœκ°€ λœλ‹€.

  3. 이제 listen ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ socket_fd으둜 ν΄λΌμ΄μ–ΈνŠΈ 접속 μš”μ²­μ„ 확인할 수 μžˆλ„λ‘ μ…‹νŒ…ν•œλ‹€. ν•œνŽΈ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ connect둜 μ ‘μ†μš”μ²­μ„ ν•œλ‹€.

  4. 우린 select둜 μš”μ²­μ„ κ°μ§€ν•˜μ—¬ socket_fd에 λ³€ν™”κ°€ 있으면 μ•„λž˜ 5λ²ˆμ„ μ‹€ν–‰ν•˜κ³ , μ•„λ‹ˆλΌλ©΄ 6λ²ˆμ„ μ‹€ν–‰ν•œλ‹€.

  5. ν΄λΌμ΄μ–ΈνŠΈ 접속 μš”μ²­μ— 따라 accpet둜 접속을 ν—ˆλ½ν•œλ‹€. 이제 client socket이 λ§Œλ“€μ–΄μ‘Œλ‹€.

  6. recv/readλ₯Ό 톡해 μ „μ†‘λ˜μ–΄ μ˜€λŠ” 데이터λ₯Ό 읽어듀인닀. 이후 write/send둜 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€.

이 λ•Œ exam μš”κ΅¬μ‚¬ν•­μ— 따라 μ–΄λŠ ν•œ ν΄λΌμ΄μ–ΈνŠΈμ˜ λ©”μ‹œμ§€λ₯Ό λͺ¨λ“  λ‚˜λ¨Έμ§€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜λ„λ‘ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€. 이λ₯Ό μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈ 정보λ₯Ό 리슀트둜 μ €μž₯ν•˜μ—¬ λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜λŠ”λ° ν™œμš©ν•˜μ˜€λ‹€.

ν•™μŠ΅ λ‚΄μš©μ— λŒ€ν•œ 개인적인 총평

42μ—μ„œλŠ” μ›Ήμ„œλ²„ κ΅¬ν˜„κ³Ό IRC κ΅¬ν˜„ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•΄μ„œ κ΅¬ν˜„ν•  수 μžˆλ‹€. 그런데 exam06이 IRC κ΅¬ν˜„κ³Ό λΉ„μŠ·ν•˜λ‹€κ³  ν•˜μ—¬ μ΅μˆ™μΉ˜μ•Šμ„κ±°λΌ κΈ΄μž₯ν–ˆλŠ”λ°, μ–Όλ§ˆ μ „κΉŒμ§€ μ•‘μ…˜μΌ€μ΄λΈ”λ‘œ λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜μ—¬ μ±—νŒ…ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ„œμΈμ§€ 별 μœ„ν™”κ° 없이 κ΅¬ν˜„ν•  수 μžˆμ—ˆλ‹€. κ΅Ώκ΅Ώ

λ‹€μŒ ν•™μŠ΅ κ³„νš

  • exam06 μ‘μ‹œ

Last updated

Was this helpful?