스피커 : 지금하자의 다이빙 배포 코드로 하고 상황을 살펴 하는 코드는 작성 운영 될 것입니다. 하루의 끝에서, 당신은 구현하는거야 웹 서버의 전체. 그러나 우리는 제공했다 골격과 당신 일부 기능이 코드, 특히 네트워킹 관련. 이제 살펴 보자. 여기 상단쪽으로 그래서 파일의 무리입니다 기능의 매크로 요구 사항을 테스트합니다. 지금 이것은 C, 이에 단지 기능입니다 매뉴얼 페이지의 무리에 따라 당신은 몇 가지를 정의해야 이러한 상수는 사실하기 또는 그렇게 심지어 특정 숫자이어야합니다 당신은 특정 기능에 액세스 할 수 있습니다. 그렇지 않으면 그들은 선언되지 않은됩니다 당신은 액세스 할 수 없습니다. 그래서 방법으로 이런 짓을했습니다 의 매뉴얼 페이지를 읽고. 이제 아래로 아래에서 (17)을 통해 라인 (15), 우리 선언 제한의 전체 무리가있다. 그리고 우리는에서이 빌려했습니다 아파치라는 인기있는 웹 서버입니다. 그리고 이건 그냥 아르 가는 번호 총 수를 캡 바이트의 허용됩니다 HTTP 요청에 대한 다양한 상황에서 하는 브라우저가 저를 보낼 수 있습니다. 다음으로, 우리는 옥텟을 정의합니다. 지금 옥텟은 멋진 방법입니다 바이트, 또는 8 비트를 말하는. 작년 바이트에서 밝혀 반드시 8 비트이었다, 그래서 진수는 항상 8 비트입니다. 그래서이 경우에 우리는 채택했습니다 어떤 네트워킹에 일반적입니다 8 바이트 진수를 호출하는 세계. 나는 여기 옥텟 것이다 지정한 그래서 많은 법의학처럼, 512 일 우리의 무리를 읽을 때 한 번에 바이트, 여기에 너무, 우리는을 읽을거야 한 번에 옥텟의 무리. 헤더 파일의 전체 무리 다음. 어떻게 다음을 포함하는 아시나요? 그럼 난 단순히 사람을 읽고 여러 기능의 페이지 우리는이 배포에 사용하고 있다고 코드와는 것들에 포함 나는 지시했다. 그리고 지금 우리는 데이터 유형이 있습니다. 우리는 문자로 옥텟을 선언했습니다. 그리고 우리는 그건 나중에 볼 수 있습니다 코드에서 사용. 그리고 우리가 선언 한 프로토 타입의 전체 무리, 우리는을 통해 신속하게 다룰 것이다 그 각각의 기능. 마지막으로, 그리고 아마도 가장 유지하는 것이 중요합니다 이 시점에서에서 마음 이야기이며, 그이 실제로, 전체 아르 전역 변수의 무리 파일의 맨 위에, 루트, CFD, SFD, 요청, 파일 및 신체. 지금 일반적으로, 많은 글로벌 사용 변수 또는 모든 글로벌 변수, 다시 방법이 아닙니다. 그러나 우리는 또한을 사용하고 밝혀 기술이라는 신호 처리 이후 우리를 수있는 코드에서 사용자가 뭔가를 칠 때 감지 CTRL C 및 종료 등 정상적으로 서버. 그리고 순서대로 정상적으로 그렇게하는 실제로 메모리를 최대, 우리는에 액세스 할 수 있어야 이 전역 변수. 그리고 지금의 메인 살펴를 취할 수 있도록하는 이 프로그램의 전체를 구동시킨다. 첫째, 여기에 상단에 우리 오류 번호 변수가 즉하지에 나타납니다 유형을 가지고 있지만, 그건 실제로 왜냐하면 라는 파일에 정의 오류 errno.h하는 높은까지 포함되어 있습니다. 당신은 실제로에 errno는 만두 경우 이 일에 대한 정의를 참조하십시오 이는 것을 볼 수 있습니다 특별한 전역 변수가 전체 무리에 의해 설정된다 기능으로 기록되지 우리로하지만, 리눅스의 작성자 다른 시스템은 실제로 설정 그 변수 뭔가 번호 잘못되면 당신은 세계적으로 할 수 있도록 잘못 무슨 짓을했는지 알아. 이제 아래 아래 새를 볼 수 있습니다 기술은 아마도, getopt는을 사용하여 구문 분석 명령을하는 데 도움이 기능 행 인수 우리가하지 않도록 내는 시간 낭비를 귀찮게해야 밖으로 8080과 같은 구문을 분석하는 방법, 또는 대시 p 또는 대시 시간 도움을받을 수 있습니다. getopt는 본질적으로 우리 것을 않습니다. 더에 대한 매뉴얼 페이지를 참조하십시오. 다음은 오류의 조금을 확인 검사 포트 번호 내에 있다고 사양에 지정된 범위. 다음으로, 함수 호출을 참조 누구의 정의, 우리가 있습니다 시작 잠시보고, 그 이름으로 이런 웹 서버를 개시, 시사한다. 여기서 우리는 함수를 호출을 라고 불리는 신호, 만약 당신이에서 컨트롤 C를들을 때 사용자의 키보드, 가서 전화 무슨 기능이라고 핸들러 궁극적으로 청소 일까지 정지 서버. 그 아래가 될 것으로 보인다 무엇인가 무한 루프, 첫 번째 줄에있는의 효과적으로 전화입니다 라는 함수에 자신을 우리있는 재설정 위해 나중에 구현 글로벌 상태의 일부를 확보합니다. 그 후의 라인 코드 그 조건 반환을 확인한다 연결의 값입니다. 술어 같은 지금 연결 외모, true 또는 false를 반환 뭔가. 그리고는 않지만, 거기에 연결에 뭔가 특별한 한다는 점에서 차단 호출입니다. 그것은 앉아서 대기 사용자의 브라우저까지 이 웹에 연결을 시도합니다 서버 만 그것은 것 우리가 진행되도록 true 또는 false를 반환 이 경우 문 안쪽에. 가되면,이 기능을 통지 우리가 쓴 구문 분석 호출 된 함수, 이는 모든 옥텟 모두 파싱 브라우저에서 나오는 바이트 서버에 있도록하는 것은 우리 손으로 할 수 있습니다 하나는 다시 궁극적으로 값 그 전역 변수의 저장 단지의 모든 바이트 그 헤더 요청되지 본체 여기에 실제로 몸이 있다면. 이제 우리가 시작 아래로 아래로 추출하는 그 헤더를 구문 분석 정보의 서브 세트 우리가 걱정하는 것을. 특히, 당 사양, 우리는 첫 번째 인 라인을 요청하고 싶어 단지 바로 그 첫 번째 줄이 희망 GET 같은 것을 말한다 슬래시 또는 일부 경로 다음 HTTP 1.1. 우리는이 비유를 사용하는 건초 더미에서 바늘 특정 찾기 위해 문자 또는 주소. 그리고 실제로, 다수있다 우리의 유통 코드의 기능 당신 것을, 너무, 도움이 될 수 특정 값을 찾을 때. 궁극적으로, 우리는 이러한 바이트를 복사 변수라는 라인으로, 이는 너무, 우리가했습니다, 알 스택에 할당 동적 크기 배열의 방법으로. 그리고 우리는 의도적으로 노력하고 malloc을 호출 피하기 위해 다시 때문에, 때문에 컨트롤 C가되는 이 프로그램의 잠재적 기능 우리 갑자기이 코드를 싶지 않아 사용자 타격에 의해 중단 컨트롤 C의 결과 나는 기회가 없을 수도 있다는 것입니다 무료 뭔가를 내가 malloc으로 할당했습니다. 그래서 많이 사용하려고 해요 스택의 내가 여기서 할 수 있습니다. 다음 DOS로의 전체 무리입니다. 스펙은, 해설 것 여기에 예상 정확히 무엇에, 하지만 의견은 당신에게 어떤 힌트 앞서있다. 귀하에게 먼저 필요 요청 라인을 검증 그것은처럼 보이는 있는지 확인 사양은, 말하자면, 문법 그것은해야했다. 당신은 무언가를 추출해야 밖으로 물건, 쿼리라고 물음표 후, 같은 우리는 구글의 예를 보았다 HD 매개 변수를 전달한다. 우리는 함께 연결하여 웹 서버의 루트 에서의 경로로 해당 요청 첫 번째 줄 그리고 전체 경로를 형성 파일이 우리가 찾고 싶을. 그 후, 우리는 확인거야 하는 파일이 존재하고 읽을 수 있습니다. 그리고 우리는 대요 그 파일 확장자, .HTML 또는 .php로, 또는에서의 몇 가지 예 확장 요청 문자열의 맨 끝. 위로 다음은 전체입니다 코드의 무리 우리는 썼다 실제로 PHP를 생성하는 당신을 위해 콘텐츠를 생성합니다. 간단히 말해서,이 코드 이름으로 소요 파일의 당신은 PHP가 해석 할 수 있습니다. 우리는라는 뭔가를 전달 PHP의 인터프리터에 파이프. 마치 응답을 받기 응답 파일 자체였다. 그리고 우리는 그 파일의 반복 하나의 버퍼에 그들 모두를 당겨 바이트, 우리가 궁극적으로 할 수 있도록 그 값을 출력하면된다. 이들 중 실제로, 모든 dprintf 여기를 호출 우리는 무엇인가를 인쇄 할 수 있습니다 파일 기술자,라고하는 다만 정수 그 파일을 나타냅니다. 정신에 매우 유사하지만 파일 근본적으로 다르​​다 스타 포인터. 이 같은 구문을 사용하는 방법에 주목 printf와 여기에 내가 동적으로 할 수 있도록 길이 같은 것을 삽입 HTTP 헤더의 값 콘텐츠 길이라고합니다. 그리고 궁극적으로 내가 사용하는 기능 실제로 쓸 수있는 권리 요청에 대한 본문. 불행하게도, 우리는 단지 구현 동적 지원 생성 PHP 파일. 우리는 대한 지원을 구현하지 않았다 정적 GIF를 같은 파일 및 사진과, 및 CSS와 HTML 파일. 즉, 불행하게도, 당신의 몫이다 클라이언트 목적에 응답하기 이해야 할 일. 거기에 그래서 당신이 있다는 것을 확인할 수 있습니다 하지 그 블록 내에서 많은 영감, 하지만 어떻게에서 최대 조금 높을 경우 우리는 PHP 코드를 해석에 대한 갔다 함수를 사용합니다 조금 다릅니다. 사실, 당신은 빌릴 수 있습니다 일부 기능 아마도 법의학에서 문제 설정 때문에 하루의 끝에서 모든 작업을 수행해야 당신이 알고 일단 여기에서이 열려 어떤 파일 당신이 알고 일단 그것은 소위 것 MIME 유형 또는 콘텐츠 형식, 당신은 그 바이트 읽을 필요 그리고 어떻게 든 다시 침을. 이의 그리고 지금 투어 파일의 다른 기능. 첫 번째 연결까지, 이는 단순히 true를 반환 때 마지막으로 듣는 사용자의 연결. 위로 다음 오류입니다. 오류, 한편, 같은 기능 우리 다른 (400)의 모두를 처리하도록 쓴 500 HTTP 상태 당신은 할 수 있습니다 코드 사용자에게 다시 보내려면 표준 메시지와 함께. 다음은로드는, 특히 그 목적은 인생에서 고기 기능, 파일 스타에서 읽을된다을 포인터 글로벌 버퍼에 파일의 내용 우리는 세계적으로 선언 그 [위? 주. ?] 이것은 우리 때문에 조금 복잡 파일에서 바이트를 읽을 필요 하지만 반복 될 때마다 확인 우리는 이미했습니다 여부 파일의 단부에 충돌하거나 뭔가 잘못왔다. 그리고 우리는 그 확인으로 realloc을 사용 무엇이든 우리가 사용하는 버퍼 것은 성장 성장과 항상 성장하고 바이트 수 앞서 머물고 우리는 거기에 맞게 필요. 핸들러 한편,이다 가져 오는 기능 데의 방법에 의해 호출 신호로 제어 C 등록 우리는 요격 할 것인지. 핸들러 여기에 주목 그것은 그 궁극적으로 통화를 중지하는 과정의 웹 서버를 중지합니다. 그리고 불행하게도, 조회 구현되지 않습니다. 정신이있다 아주 간단한 기능. 파일 확장자 감안할 때, 그것은 필요 이 MIME 소위의 반환합니다 유형 또는 콘텐츠 형식. 그리고 우리는 사양에 지정 이 매핑은 무엇을해야. 하지만 번역해야합니다 궁극적으로 C 코드에 그것. 다음은 우리의 유사 고기 기능입니다 인생에서 누구의 목적, 구문 분석이라고 없는 파일에서 읽는 것입니다, 하지만, 네트워크 연결에서. 특히, 읽기, 구문 분석 브라우저에서왔다 HTTP 요청 그래서 서버 궁극적으로 우리가 분석 할 수 요청에 그냥 헤더에 라인과 당신에게 사람들을 반환 글로벌 버퍼의 방법으로 그 우리는 [위에서 언급? 주. ?] 한편,이다, 리셋 우리는 정의 기능 그 반복적 내부 호출된다 주마다의 당신에 관한 이야기 듣기 시작할 준비 새 연결을위한 우리는 항상 알 수 있도록 우리의 상태 변수 그 때문에 우리는 또한했습니다 메모리를 해제하는 에 할당되었을 수 있습니다 이전 네트워크 연결. 다음은 IS 시작 우리가 쓴 기능 그 전체를 포함 네트워킹 코드의 많은 그 궁극적으로 웹 서버를 시작합니다. 마지막 최대 수있는 기능입니다 라는 정지하는 정확히 않습니다, 그것을 웹 서버를 중지합니다. 하지만 먼저 그것은 어떤 메모리를 해제 그 여전히 할당되었습니다. 그러나 궁극적으로 종료 호출 심지어 컨트롤을 반환하지 않고 우리의 주요 기능. 결국, 하나의 가장 중요한 기술 구현할 때 웹 서버는 시행 착오의 비트 될 것, 하나의 브라우저 창을 열어 갖는 에서 오른쪽 터미널 창에서 왼쪽, 서버 콘솔 창, 그래서 당신 있는 메시지를 볼 수 있습니다 화면에 표시된다. 그러나 더 나은 여전히​​ 세 번째 일 것입니다 창, 제 2 단자 창 여기에서는 텔넷, 사용을 사용 하는 사양에 규정되어있다. 그리고 텔넷은 매우입니다 간단한 네트워크 프로그램 그것은 당신이 척 수 하나의 창에서 브라우저로 다른 창으로 얘기하는 동안. 당신이 볼 수있는 방법 정확히 텍스트 명령 다시이오고있다 서버에서 클라이언트로 파고하지 않고 크롬의 개발자 주위에 그렇지 않으면 도구 clunkier 인터페이스를 제공합니다.