3μ₯ μμΌ νλ‘κ·Έλλ°
μμΌμ κΈ°λ³Έμ μΌλ‘ νμΌ νΈλ€κ³Ό λΉμ·νλ€. λμ€ν¬μ κΈ°λ‘νκ±°λ μ½μ΄ λ€μΌ λ νμΌ νΈλ€μ μ¬μ©νλ κ²μ²λΌ λ€νΈμν¬λ‘ λ°μ΄ν°λ₯Ό μ μ‘νκ±°λ λ°μ λ μμΌ νΈλ€μ μ¬μ©νλ€.
μ¨λΌμΈ κ²μ νλ‘κ·Έλλ°μμ μμΌμ νμΌ νΈλ€ λ°©μκ³Όλ μ½κ° λ€λ₯΄λ€.
- TCPλ‘ ν΅μ νλ κ²½μ° ν΄λΌμ΄μΈνΈ κ°μλ§νΌ μμΌμ΄ μμ΄μΌ νλ―λ‘ κ²μ μλ²μμ λ€λ£¨μ΄μΌ νλ μμΌ κ°μκ° λ§λ€.
- νμΌ νΈλ€μ νλ λμ μ€λ λκ° λκΈ°νλ μΌμ΄ μμ΄μΌ νλ€.
μ΄λ¬ν νΉμ§μΌλ‘ λ€νΈμν¬ νλ‘κ·Έλλ°μμ μμΌμ λ³΄ν΅ λΉλκΈ° μ μΆλ ₯ μνλ‘ λ€λ£¬λ€. λΉλκΈ° μ μΆλ ₯ λ°©μμλ ν¬κ² λ ΌλΈλ‘νΉ μμΌ λ°©μκ³Ό Overlapped I/O λ°©μμ΄ μλ€. κ·Έλ¦¬κ³ μ΄ λ°©μμ μ§λ³΄μν¨ epollκ³Ό IOCP(I/O Completion Port) λ°©μμ΄ λ§μ΄ νμ©λλ€.
1. λΈλ‘νΉ μμΌ
λλ°μ΄μ€μ μ²λ¦¬ μμ²μ κ±Έμ΄ λκ³ μλ΅μ λκΈ°νλ ν¨μλ₯Ό νΈμΆν λ μ€λ λμμ λ°μνλ λκΈ° νμμ λΈλ‘νΉμ΄λΌ νλ€. μμΌλΏλ§ μλλΌ νμΌ νΈλ€μ λν ν¨μλ₯Ό νΈμΆνμ λλ μ΄λ¬ν λκΈ° νμμ΄ λ°μνλ κ²μ λͺ¨λ λΈλ‘νΉμ΄λΌ νλ€.
λΈλ‘νΉμ΄ λ°μν μ€λ λμμλ CPU μ°μ°μ νμ§ μλλ€. μ¦, μ€λ λλ waitable stateμΈ μνμ΄λ€. μ΄ μνμΌ λ νμΌμ΄λ μμΌμ μ€μ μ²λ¦¬λ λλ°μ΄μ€μμ νλ€. μμ μ΄ λλλ©΄ μνλ λ€μ running μνλ‘ λ°λλ€.
2. λ€νΈμν¬ μ°κ²° λ° μ‘μ
TCPλ μ°κ²° μ§ν₯ν νλ‘ν μ½μ΄λ©° μΌλμΌ ν΅μ λ§ νλ½νλ€. λ°λΌμ TCP μμΌ 1κ°λ μ€μ§ λμ 1κ° νκ³ λ§ ν΅μ ν μ μλ€.
- connect() ν¨μλ μνλ°© λμ μ ν₯ν΄ TCP μ°κ²°μ μλνλ€. μ΄λ μ°κ²° μλ΅μ΄ μ¬ λκΉμ§ λΈλ‘νΉμ μ μ§νλ€.
- send() ν¨μλ μκΈ° μ»΄ν¨ν°μ μ΄μ체μ μμ μλλ°© μ»΄ν¨ν°λ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ μ²λ¦¬κ° μλ£λλ©΄ 리ν΄νλ€.
3. λΈλ‘νΉκ³Ό μμΌ λ²νΌ
μμΌμ κ°κ° μ‘μ λ²νΌμ μμ λ²νΌλ₯Ό νλμ© κ°μ§κ³ μλ€.
μ‘μ λ²νΌλ
- λ°μ΄νΈ λ°°μ΄μ΄λ©° ν¬κΈ°λ κ³ μ λμ΄ μμΌλ ν¬κΈ°λ₯Ό λ§μλλ‘ λ³κ²½ν μ μλ€.
- FIFO ννλ‘ μλνλ€.
- send(data)λ₯Ό νΈμΆνλ©΄ dataλ μ‘μ λ²νΌμ μ±μμ§κ³ μ μ ν ν΅μ μ λ‘λ₯Ό ν΅ν΄ μ μ°¨μ μΌλ‘ λΉ μ Έλκ°λ€.
- μ‘μ λ²νΌκ° κ°λ μ°¬λ€λ©΄ λΈλ‘νΉμ΄ λ°μνκ³ λΉ κ³΅κ°μ΄ μκΈ°λ©΄ λΈλ‘νΉμ΄ ν΄μ λκ³ send() ν¨μλ₯Ό 리ν΄νλ€.
4. λ€νΈμν¬ μ°κ²°λ°κΈ° λ° μμ
- accept() ν¨μλ TCP μ°κ²°μ΄ λ€μ΄μ¬ λκΉμ§ κΈ°λ€λ¦°λ€.
- recv() ν¨μλ μμ ν μ μλ λ°μ΄ν°κ° μμΌλ©΄ λΈλ‘νΉμ΄ μΌμ΄λλ€. μ΄λ λ°μ λ°μ΄ν° ν¬κΈ°κ° 0λ°μ΄νΈλΌλ©΄ μλλ°©μμ TCP μ°κ²°μ λλμμ μλ―Ένλ€.
μμ λ²νΌλ
- μ‘μ λ²νΌμ λ§μ λΆλΆμ΄ λΉμ·νμ§λ§ μλ μμκ° λ°λμ΄λ€. μ‘μ λ²νΌμλ μ¬μ©μκ° push()νκ³ μ΄μ체μ κ° pop()μ νμ§λ§ μμ λ²νΌμλ μ΄μ체μ κ° push()νκ³ μ¬μ©μκ° pop()μ νλ€.
- λ°μ΄ν°κ° μμ λλ κ²μ΄ μμ λλ§λ€ κ³μν΄μ μμ λ²νΌμ μ±μμ£Όλλ°, κ½ μ°¨λ©΄ λ μ΄μ λ°μ΄ν°λ₯Ό λ°μ§ μλλ€.
- μμ λ²νΌκ° μμ ν λΉμ΄ μμΌλ©΄ λΈλ‘νΉμ΄ λ°μνλ€.
5. μμ λ²νΌκ° κ°λ μ°¨λ©΄ λ°μνλ νμ
λ§μ½ μμ ν¨μκ° μμ λ²νΌμμ λ°μ΄ν°λ₯Ό κΊΌλ΄λ μλκ°
μ΄μ체μ κ° μμ λ²νΌμ λ°μ΄ν°λ₯Ό μ±μ°λ μλλ³΄λ€ λ리면 μ΄λ»κ² λ κΉ?
TCP μμ ν¨μμΈ recv()λ 1λ°μ΄νΈλΌλ μμ ν μ μμΌλ©΄ μ¦μ 리ν΄νλ€. μμ κ°μ μν©μμλ μ΄λ»κ² λμν κΉ?
μμ λ²νΌμλ λ¨μ 곡κ°μ΄ νλλ μμ λκΉμ§ μμ ν μ±μμ§κ² λκ³ λ°μ΄ν°λ₯Ό 보λ΄λ μͺ½μμλ μ‘μ ν¨μ send()κ° λΈλ‘νΉλλ€. μ΄ μνμμλ TCP ν΅μ μ μ ν μκ³ TCP μ°κ²°λ§ μ΄μ μλ κ²μ΄λ€.
UDP μμΌμμλ λ°μ΄ν°κ·Έλ¨μ΄ μ΅μ 1κ° λμ°©ν΄ μμΌλ©΄ μ¦μ 리ν΄νλ€. μμ κ°μ μν©μμλ μ΄λ»κ² λμν κΉ?
μμ λ²νΌκ° λ΄μ μ¬μ 곡κ°μ΄ μμΌλ©΄ λ°μ΄ν°κ·Έλ¨μ κ·Έλ₯ λ²λ €μ§λ€. μ΄λ μ‘μ ν¨μ sendTo()μ λΈλ‘νΉμ λ°μνμ§ μλλ€. μ¦, λ°μ΄ν°κ·Έλ¨ μ μ€μ΄ λ°μνλ€.