myserver.c μ½λ κ°μ
μ΄ νλ‘κ·Έλ¨μ ν΄λΌμ΄μΈνΈλ‘λΆν° HTTP μμ²μ λ°μλ€μ΄κ³ , μμ²λ νμΌμ μ½μ΄ ν΄λΌμ΄μΈνΈμκ² μλ΅νλ κΈ°λ₯μ μνν©λλ€. λ€μ€ ν΄λΌμ΄μΈνΈ μμ²μ μ²λ¦¬νκΈ° μν΄ νλ‘μΈμ€λ₯Ό forkνλ λ°©μμΌλ‘ ꡬνλμμ΅λλ€.
ν¨μ μ€λͺ
main ν¨μ νλ‘κ·Έλ¨μ μ§μ μ μ λλ€. μ¬μ©μλ‘λΆν° ν¬νΈ λ²νΈλ₯Ό μ λ ₯λ°κ³ , μλ² μμΌμ μμ±νμ¬ ν΄λΌμ΄μΈνΈμ μ°κ²°μ λκΈ° ν©λλ€. ν΄λΌμ΄μΈνΈμ μμ²μ΄ λ€μ΄μ€λ©΄ handle_request ν¨μλ₯Ό νΈμΆνμ¬ μμ²μ μ²λ¦¬ν©λλ€. handle_request ν¨μ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νλ ν¨μμ λλ€. ν΄λΌμ΄μΈνΈμμ μ°κ²°μ΄ μ±κ³΅νλ©΄ μλ‘μ΄ νλ‘μΈμ€λ₯Ό forkνμ¬ μμ²μ μ²λ¦¬ν©λλ€. ν΄λΌμ΄μΈνΈμ μμ²μ νμ±νκ³ , μμ²λ νμΌμ μ°Ύμ send_response ν¨μλ₯Ό νΈμΆνμ¬ μλ΅μ 보λ λ λ€.
send_response ν¨μ ν΄λΌμ΄μΈνΈμκ² HTTP μλ΅μ 보λ΄λ ν¨μμ λλ€. μμ²λ νμΌμ μ½μ΄μ ν΄λΌμ΄μΈνΈμκ² μ μ‘ν©λλ€. μμ²λ νμΌ μ νμ₯μμ λ°λΌ μ μ ν Content-Type ν€λλ₯Ό μ€μ νμ¬ μλ΅ν©λλ€.
get_file_size ν¨μ νμΌμ ν¬κΈ°λ₯Ό ꡬνλ ν¨μμ λλ€. νμΌ λμΌλ‘ μ΄λν ν νμ¬ νμΌ μμΉλ₯Ό κ°μ Έμμ νμΌμ ν¬κΈ°λ₯Ό κ³μ°ν©λλ€.
send_file ν¨μ νμΌμ ν΄λΌμ΄μΈνΈμκ² μ μ‘νλ ν¨μμ λλ€. νμΌμ μ½μ΄μ BUFFER_SIZE λ¨μλ‘ ν΄λΌμ΄μΈνΈμκ² μ μ‘ν©λλ€.
μ΄λ €μ λ λΆλΆ HTTP ν€λ μ²λ¦¬νλ λΆλΆ : HTTP μμ²κ³Ό μλ΅μ ν€λλ₯Ό μ μ νκ² μ²λ¦¬νλ κ²μ΄ μ΄λ €μ μ΅λλ€. νΉν, Content- Type ν€λλ₯Ό μ¬λ°λ₯΄κ² μ€μ νκ³ μμ²λ νμΌμ μ μ‘νλ κ³Όμ μμ λ§μ μ΄λ €μμ κ²ͺμμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νμΌμ νμ₯μλ₯Ό νμΈνμ¬ μ μ ν Content-Type ν€λλ₯Ό μ€μ νμ΅λλ€. ν΄λΌμ΄μΈνΈ μμ²μ μ²λ¦¬νλ λΆλΆμμ κ²ͺμ μ΄λ €μ λ μ€λ₯λ€:
νμΌ λ¬΄ν μ½κΈ° 루ν: νμΌμ μ½μ΄μ€λ κ³Όμ μμ 무ν 루νκ° λ°μνμ΅λλ€. μ΄λ νμΌμ μ½μ λ νμΌμ λμ λλ¬ νμ¬ fread ν¨μκ° 0μ λ°ννμ§ μμμ λ°μν λ¬Έμ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νμΌμ μ½μ λ νμΌμ λμ λ λ¬νλμ§λ₯Ό νμΈνκ³ , λ μ΄μ μ½μ λ°μ΄ν°κ° μμ λμλ§ λ£¨νλ₯Ό μ’ λ£νλλ‘ μμ νμμ΅λλ€.
λ€μ€ ν΄λΌμ΄μΈνΈ μμ² μ²λ¦¬: μΉ μλ²λ λ€μμ ν΄λΌμ΄μΈνΈ μμ²μ λμμ μ²λ¦¬ν μ μμ΄μΌ ν©λλ€. νμ§λ§ κΈ°μ‘΄ μ½ λλ ν λ²μ νλμ ν΄λΌμ΄μΈνΈ μμ²λ§μ μ²λ¦¬νλ λ°©μμΌλ‘ λμνκ³ μμμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ ν΄λΌμ΄μΈ νΈ μμ²μ μ²λ¦¬νλ ν¨μμΈ handle_requestμμ μμ νλ‘μΈμ€λ₯Ό μμ±νμ¬ μμ²μ μ²λ¦¬νλλ‘ λ³κ²½νμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ ν΄λΌμ΄μΈνΈμ λμ μμ²μ μ²λ¦¬ν μ μκ² λμμ΅λλ€.