본문 바로가기

네트워크3

[Tiny web server] serve dynamic content cgi-program을 실행하고 클라이언트측에 출력해보자. 이론 간단정리 cgi-program이 필요한 인자를 참조하는 과정 클라이언트에서 서버로 URI를 통해 인자가 전달된다. 서버는 프로그램을 실행할 자식 프로세스를 생성한다. 자식 프로세스는 CGI환경변수에 인자를 설정하고 프로그램을 실행한다. 프로그램은 런타임에 이를 참조한다. 자식 프로세스의 context에서 호출되는 주요함수 setenv : CGI 환경변수 QUERY_STRING을 초기화 dup2: 표준 출력을 클라이언트와 연결된 식별자로 redirect execve : 프로그램을 로드하고 실행 getenv : 환경변수 값을 참조 코드 & 확인 adder.c(cgi-program) #include "csapp.h" int main(void) {.. 2023. 3. 11.
[Tiny web server] serve static content 이론 간단정리 server와 client는 연결을 통해서 통신한다. 연결은 다음과 같이 두 소켓으로 식별된다. (튜플로 나타내는 소켓 쌍) (소켓에 들어있는 host ip는 private ip 가 아닌 public ip 임에 유의하자) (클라이언트 측 포트는 포트 번호가 연결이 수립될 때 정해지는 단기 포트이다) server는 socket , bind, listen , accept 함수를 호출해서 연결을 수립한다. client는 socket , connect 함수를 호출해서 연결을 수립한다. 이 함수들의 인자들은 getaddrinfo 함수를 이용해서 얻는다. open_listenfd는 socket , bind, listen 함수를 감싼 것으로 서버 측에서 호출한다. 이 함수를 호출하면 listening .. 2023. 3. 9.
csapp 연습문제 11.2 문제 인자로 받은 16bit 16진수를 network byte order (big endian)으로 변환 후 출력하는 프로그램을 작성하라 해답 다음과 같은 의문점이 든다. 1. 책의 예시인 0x400를 입력받으면 출력이 1024가 아니라 4가 되어야 하는 것 아닌가 ? 2. host의 byte order를 리틀 엔디안이라고 가정한 건가 ? 3. 왜 문제에서 요구하지 않은 dotted-decimal 스트링을 출력하는가? 변경한 코드 #include "csapp.h" int main(int argc, char **argv) { printf("argc : %d\n",argc); printf("argv[0] : %s\n",argv[0]); printf("argv[1] : %s\n",argv[1]); // Typ.. 2023. 3. 1.