Jikang Branch Report - 404-DriverNotFound/200-OK GitHub Wiki
Feat: localhost 100 μΌλ‘ μ°κ²°νλ©΄, 404 error λ₯Ό μμ λ°κ³ testcase κ²½λ‘μ μλ μν νμΌμ λ΄μ©μ send νλ€.
Flaw: Makefile μ λͺ©μ νμΌμ΄ μ€λ³΅μΌλ‘ μμ±λ¨. issue #13 fixed by Yunslee 20210422
http message μ μλ² μ’ λ£ μμ΄ λ°λ³΅μ μΌλ‘ λ°μ μ μλ μλ²λ‘μ§ μμ±.
ν΅μ μμΌμΌλ‘λΆν° buffer λ₯Ό μ¬λ¬λ² read νμ¬ λ°μμ¬ μ μλλ‘ λ§λ€μμ. νμ§λ§ buffer λ₯Ό ν©μΉλ κ³Όμ μ μ ν λ£μ§ μμ, ν μ€νΈν΄λ³Ό λ νλ²μ buffer λ₯Ό λ°μμ¬ μ μλλ‘ buffer ν¬κΈ°λ₯Ό 100 μ΄μμΌλ‘ μΆ©λΆν ν¬κ² λ§λ€κ³ ν΄μΌν¨.
μλμ μ½λλ‘ λͺ¨λ μμΌμ μλ λ΄μ©μ μ½κ³ 무ν루νλ₯Ό λΉ μ Έλμ¬ μ μμ.
while (bytesRead == BUFFER_SIZE - 1)
{
memset(buffer, 0, BUFFER_SIZE);
bytesRead = read(connections, buffer, BUFFER_SIZE - 1);
if (bytesRead == -1)
std::cerr << "Could not read request." << std::endl;
}
무ν 루ν μμ ν΅μ μμΌμ μ½κ³ , ν΅μ μμΌμ μμ νλ μ μ°¨κ° λ€μ΄μμ.
-
μΆκ°λ κΈ°λ₯
- μλμ λκ°μ§ 쑰건μ λ§μ‘±νμ μ, μ¬λ¬λ² μλ‘ κ³ μΉ¨μ ν΄λ μ μμ μΌλ‘
<h1>Hello World</h1><h1>This is 200 OK!</h1>κ° μ€νλ¨.-
-fsanitize=addressμ΅μ μ κ±°ν ν μ»΄νμΌ ν΄μΌν¨.- κ·Έλ μ§ μμΌλ©΄ segfault
- κ·Έλ°λ°, κ°λμ μ΄ μ΅μ μ λ£μ΄λ μ€νμ΄ μ λλ€.
- buffer κ° μ΄λ ΄νμ΄ 100 μ΄μ μΆ©λΆν μ»€μΌ μ€ν κ°λ₯νλ€.
- κ·Έλ μ§ μμΌλ©΄ segfault
-
- μλμ λκ°μ§ 쑰건μ λ§μ‘±νμ μ, μ¬λ¬λ² μλ‘ κ³ μΉ¨μ ν΄λ μ μμ μΌλ‘
-
λ³κ²½ν μ΄λ¦
- Socket(port, ip) μ μΈμ μμλ₯Ό Socket(ip, port) λ‘ λ³κ²½νμμ.
μ΄ λ‘μ§μ λ°νμΌλ‘ νμλ€μ΄ μΌμΉλ λ‘μ§μΌλ‘ λ³ΈμΈμ λ‘μ§μ ν μ€νΈν΄λ³Ό μμμ
첫 λ²μ§Έ)
Socket socket(80, INADDR_ANY); μ κ°κ° ν¬νΈ λ²νΈ, IPv4 μ£Όμλ₯Ό λ£λλ€.
make ν, ./webserv μ€ννμΌμ μ€ννκ³ safari secret λͺ¨λλ‘ λ€μ΄κ° ν΄λΉ IP μ port λ²νΈλ‘ μ μνλ€.
ex) localhost:80
ν°λ―Έλμ λ°μμ¨ HTTP μμ² μΆλ ₯μ νμΈνλ€.
λ λ²μ§Έ)
-fsanitize=addressμ λΉνμ±νμ 무 μ buffer κ° 100 μ΄μμΈμ§ νμΈνλ€. κ·Έλ¦¬κ³ make νμ¬ μ€νν λ€, μλ‘κ³ μΉ¨μ νμΈνλ€.
##μμ²μ¬ν
λͺ¨μλ₯Έ λΆλΆ λ¬μμ£ΌμΈμ.
Sujung λκ³Ό Minckim λμ main λ¬Έμ μΉ΄νΌνμ¬ κ·Έ main λ¬Έμ λ§μΆ° μ§κΈκΉμ§ μ§ μ½λλ₯Ό μμ νμμ.
μΆκ°λ κΈ°λ₯
- main λ¬Έμ try, catch λ¬Έ
- μ 체μ μΈ μμΌμ κ΄λ¦¬νλ Webserver ν΄λμ€ λ§λ€μμ.
- μ§κΈκΉμ§μ main.cpp μ μλ λ‘μ§μ΄ Webserver.cpp μ start_server λ©μλμ μλ€κ³ μκ°νλ©΄λλ€.
Sujung λκ³Ό Minckim λμ νκ³Ό λΉμ·ν λ‘μ§μ ν¨κ» κ°λ €λ©΄ μ΄λ κ² κ°μ₯ κΈ°μ΄μ μΈ λ©μΈλ¬Έ λΆν° λ§μΆ°μΌνλ€κ³ μκ°νμ.
λκ°μ΄ make λ₯Ό νμ¬ μ»΄νμΌμ νλ©΄ λκ³ , -fsanitize=address μ΅μ μ κΊΌμ€μΌ μ λλ‘ μλ‘κ³ μΉ¨μ΄ κ°λ₯νκ² λλ€.
μ½λ© 컨벀μ μ μ λλ‘ λ§μΆμ§ μμμ. μΌλ¨ κ³μ μμ ν΄μΌν μΌμ΄ μκΈ°λ κ²κ°κ³ μ§κΈ λ‘μ§μ΄ μ΄λμ λ νΌμ΄ μ¬λΌμ€μ§λ μμλ λ° κ³μ μμ νλ©΄μ νλ©΄ μ€νΈλ μ€ λ°μμ λμ€μ νκ³ μΆμ.
λν, Select λ₯Ό λ£μ΄μ λ©ν° νλμ±μ μλν΄μΌν¨.
start_server λ₯Ό start_servers μ start_a_server λ‘ λλμμ.
-
start_serversμμλselectκ° μμΌλ€μ κ°μνκΈ° μν μ½λ -
start_a_serverμμλ μλ² μμΌμμ λ²νΌλ₯Ό λ°μΌλ©°requestμresponseλ₯Ό νλ ν¨μλ₯Ό λ£μμ.
κΈ°ν μ¬ν
Socket::Accept μ λ€μ΄μλ int connection νλΌλ―Έν°λ₯Ό int client ν΄λμ€ λ³μλ‘ λ°κΏ¨μ. resolved #27
readfds λ₯Ό λͺ¨λ ν΄λμ€ν¨μμμ μ κ·Όν μ μλλ‘ ν΄λμ€ λ³μλ‘ λ°κΏ¨μ.
start_server κ° μλ² μ¬λ¬κ°λ₯Ό λ리λ λ°, κ·Έ μ΄λ¦μ κ±Έλ§μ§ μκ² λͺ¨λ server λ₯Ό μ μ΄νκ³ λ무 μ½λμκ° λ§κΈ° λλ¬Έμ start_servers λ‘ μ΄λ¦μ λ³κ²½νκ³ μ½λλ₯Ό λλ νμκ° μμμ.
make λ‘ μνν΄μ μ΄μ κ³Ό λκ°μ΄ 8000, 8001, 8002 λ²μ΄ μ μλνλ μ§ νμΈνλ€. νΉλ³ν κΈ°λ₯μ μΆκ°ν κ²μ μλ€.
request μ response λ‘ ν΄λΌμ΄μΈνΈμ μ£Όκ³ λ°κ² λλ€λ©΄ μ§μ ν λ©ν°νλμ±μ ꡬνν΄μΌν λκ° μ¬ κ²μ. μ§κΈμ ν΄λΌμ΄μΈνΈ μμΌμμ request λ₯Ό λ°κ³ λλμ§λ§, ν΄λΌμ΄μΈνΈ μμΌμμ request λ₯Ό μ£Όκ³ λ°λ κ²μ λ°λ³΅μ μΌλ‘ κ°λ₯νκ² νλ €λ©΄, readfds μ ν΄λΌμ΄μΈνΈ μμΌμ μΆκ°ν΄μΌν κ²μ΄λ€. κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈ μμΌμμ μ°κ²°μ΄ λμ΄μ§ μνλΌλ©΄, readfds μμ FD_CLR μ μ¬μ©νμ¬ readfds μμ ν΄λΌμ΄μΈνΈ μμΌμ μ κ±°ν΄μΌνλ€.
μμ§ κ³΅λΆκ° μΆ©λΆνμ§ λͺ»ν΄μ μ΄ λΆλΆμ΄ κ°μ΄ μμ‘νλ λ°, μΌλ¨ request μ response μ λν μΆ©λΆν μ΄ν΄κ° μμ΄μΌ κ·Έλ¦Όμ΄ λμ¬ κ²κ°μμ κ·Έκ²λΆν° 곡λΆλ₯Ό ν΄λ³΄κ² μ.