1 00:00:00,000 --> 00:00:09,647 2 00:00:09,647 --> 00:00:11,730 SPEAKER: Bây giờ chúng ta hãy bổ nhào vào mã phân phối 3 00:00:11,730 --> 00:00:14,470 và hãy nhìn vào bối cảnh trong đó các mã bạn viết 4 00:00:14,470 --> 00:00:15,780 sẽ được hoạt động. 5 00:00:15,780 --> 00:00:17,350 Vào cuối ngày, bạn sẽ thực hiện 6 00:00:17,350 --> 00:00:18,710 toàn bộ các máy chủ web. 7 00:00:18,710 --> 00:00:20,460 Nhưng chúng tôi đã cung cấp bạn với bộ xương 8 00:00:20,460 --> 00:00:24,090 mã mà có một số chức năng, đặc biệt là liên quan đến mạng. 9 00:00:24,090 --> 00:00:25,390 Hãy có một cái nhìn. 10 00:00:25,390 --> 00:00:27,560 >> Vì vậy, lên đây đối đầu của tập tin là một bó 11 00:00:27,560 --> 00:00:30,020 các tính năng kiểm tra yêu cầu macro. 12 00:00:30,020 --> 00:00:33,570 Bây giờ đây chỉ là một tính năng của c, theo đó theo một bó của các trang man 13 00:00:33,570 --> 00:00:36,410 bạn phải xác định một số các hằng số này là đúng 14 00:00:36,410 --> 00:00:39,920 hoặc là ngay cả con số cụ thể để bạn có quyền truy cập vào các chức năng nhất định. 15 00:00:39,920 --> 00:00:42,470 Nếu không họ sẽ không khai báo và bạn sẽ không có quyền truy cập. 16 00:00:42,470 --> 00:00:45,340 Vì vậy, tôi đã làm điều này bằng cách đọc các trang con người. 17 00:00:45,340 --> 00:00:48,410 Bây giờ xuống dưới, trong dòng 15 đến 17, chúng tôi 18 00:00:48,410 --> 00:00:50,550 có một bó toàn bộ các giới hạn công bố. 19 00:00:50,550 --> 00:00:53,370 >> Và chúng ta đã vay mượn những từ máy chủ web phổ biến được gọi là Apache. 20 00:00:53,370 --> 00:00:54,650 Và đây là những chỉ con số đó sẽ 21 00:00:54,650 --> 00:00:56,810 để giới hạn tổng số byte được phép 22 00:00:56,810 --> 00:01:01,930 trong ngữ cảnh khác nhau cho các yêu cầu HTTP mà một trình duyệt được phép gửi cho tôi. 23 00:01:01,930 --> 00:01:04,310 Tiếp theo, chúng ta định nghĩa octet. 24 00:01:04,310 --> 00:01:07,790 Bây giờ một octet chỉ là một cách ưa thích nói một byte, hoặc tám bit. 25 00:01:07,790 --> 00:01:10,720 Hóa ra trong năm qua một byte chưa hẳn đã là tám bit, 26 00:01:10,720 --> 00:01:12,339 nên octet luôn là tám bit. 27 00:01:12,339 --> 00:01:14,880 Vì vậy, trong trường hợp này, chúng tôi đã được thông qua những gì là phổ biến trong các mạng 28 00:01:14,880 --> 00:01:17,410 thế giới gọi tám byte một octet. 29 00:01:17,410 --> 00:01:21,840 >> Ở đây tôi đã xác định rằng sẽ octet là 512, vì vậy mà nhiều như trong pháp y 30 00:01:21,840 --> 00:01:24,170 khi chúng ta đọc một loạt các byte tại một thời điểm, ở đây quá, 31 00:01:24,170 --> 00:01:27,390 chúng ta sẽ đọc một bó của octet tại một thời điểm. 32 00:01:27,390 --> 00:01:28,922 Tiếp theo một bó toàn bộ các tập tin tiêu đề. 33 00:01:28,922 --> 00:01:30,255 Làm thế nào mà tôi biết để bao gồm những? 34 00:01:30,255 --> 00:01:32,730 Vâng, tôi chỉ đơn giản là đọc man trang cho một số chức năng 35 00:01:32,730 --> 00:01:35,620 mà chúng ta sẽ sử dụng trong phân phối này mã và bao gồm trong những người thân 36 00:01:35,620 --> 00:01:37,390 Tôi được lệnh. 37 00:01:37,390 --> 00:01:39,090 >> Và bây giờ chúng tôi có một kiểu dữ liệu. 38 00:01:39,090 --> 00:01:41,470 Chúng tôi đã tuyên bố một octet là một char. 39 00:01:41,470 --> 00:01:44,040 Và chúng ta sẽ thấy sau này mà đó là sử dụng trong suốt mã. 40 00:01:44,040 --> 00:01:45,670 Và chúng ta đã khai báo một bó toàn bộ các nguyên mẫu, 41 00:01:45,670 --> 00:01:47,961 và chúng tôi sẽ nhanh chóng thông qua mỗi người trong những chức năng. 42 00:01:47,961 --> 00:01:50,400 Cuối cùng, và có lẽ hầu quan trọng để giữ 43 00:01:50,400 --> 00:01:52,520 tâm vào thời điểm này trong những câu chuyện, là có 44 00:01:52,520 --> 00:01:54,520 là, trong thực tế, một toàn bộ bó của các biến toàn cầu 45 00:01:54,520 --> 00:02:00,430 ở phía trên cùng của tập tin, thư mục gốc, CFD, SFD, yêu cầu, tập tin và cơ thể. 46 00:02:00,430 --> 00:02:03,960 >> Bây giờ nói chung, sử dụng quá nhiều toàn cầu biến, hoặc các biến toàn cầu ở tất cả, 47 00:02:03,960 --> 00:02:05,280 không phải là thực hành trở lại. 48 00:02:05,280 --> 00:02:09,090 Nhưng thực ra chúng tôi cũng sử dụng một kỹ thuật gọi là xử lý tín hiệu sau 49 00:02:09,090 --> 00:02:11,930 trong các mã, trong đó cho phép chúng tôi phát hiện khi người dùng chạm một cái gì đó 50 00:02:11,930 --> 00:02:15,080 như CTRL C và tắt các máy chủ một cách duyên dáng. 51 00:02:15,080 --> 00:02:18,240 Và để làm điều đó một cách duyên dáng và thực sự giải phóng bộ nhớ, 52 00:02:18,240 --> 00:02:20,800 chúng ta cần phải có quyền truy cập vào các biến toàn cầu. 53 00:02:20,800 --> 00:02:24,510 >> Và bây giờ chúng ta hãy nhìn vào chính, ổ đĩa toàn bộ chương trình này. 54 00:02:24,510 --> 00:02:27,720 Đầu tiên, ở phía trên ở đây chúng tôi có một biến số lỗi 55 00:02:27,720 --> 00:02:29,570 mà dường như không có một loại, nhưng đó là 56 00:02:29,570 --> 00:02:31,500 bởi vì nó thực sự định nghĩa trong một tập tin gọi là 57 00:02:31,500 --> 00:02:34,800 errno.h lỗi mà được bao gồm lên cao hơn. 58 00:02:34,800 --> 00:02:38,780 Nếu bạn làm con người errno để thực sự xem định nghĩa cho điều này, 59 00:02:38,780 --> 00:02:41,230 bạn sẽ thấy rằng đây là một biến toàn cầu đặc biệt 60 00:02:41,230 --> 00:02:43,350 được thiết lập bởi cả một bó các chức năng không được viết 61 00:02:43,350 --> 00:02:48,730 bởi chúng ta, nhưng bởi các tác giả của Linux và các hệ thống khác để thực sự thiết lập 62 00:02:48,730 --> 00:02:52,400 một số cho rằng biến khi một cái gì đó đi sai để bạn có thể trên toàn cầu 63 00:02:52,400 --> 00:02:54,830 tìm ra những gì đã đi sai. 64 00:02:54,830 --> 00:02:58,540 >> Bây giờ xuống bên dưới, bạn sẽ thấy một mới kỹ thuật có lẽ sử dụng getopt, 65 00:02:58,540 --> 00:03:01,790 một chức năng giúp phân tích cú pháp lệnh đối số dòng để chúng tôi làm không 66 00:03:01,790 --> 00:03:05,540 phải bận tâm lãng phí thời gian tìm hiểu làm thế nào để phân tích một cái gì đó giống như 8080, 67 00:03:05,540 --> 00:03:08,350 hoặc dấu gạch ngang p, hoặc dấu gạch ngang h để được giúp đỡ. 68 00:03:08,350 --> 00:03:10,300 getopt cơ bản nào đó cho chúng tôi. 69 00:03:10,300 --> 00:03:11,750 Xem trang người đàn ông cho biết thêm. 70 00:03:11,750 --> 00:03:13,960 >> Tiếp theo, chúng ta làm một chút về lỗi kiểm tra để chắc chắn 71 00:03:13,960 --> 00:03:17,420 rằng số cổng là trong vòng phạm vi quy định tại các spec. 72 00:03:17,420 --> 00:03:20,240 Tiếp theo, chúng ta thấy một cuộc gọi đến các chức năng bắt đầu, có nghĩa chúng tôi sẽ 73 00:03:20,240 --> 00:03:24,040 xem xét trong một thời điểm, và như tên gọi của nó cho thấy, điều này bắt đầu các máy chủ web. 74 00:03:24,040 --> 00:03:26,960 Ở đây chúng ta có một cuộc gọi đến một chức năng được gọi là tín hiệu mà nói, 75 00:03:26,960 --> 00:03:30,750 nếu và khi bạn nghe Control C từ bàn phím của người sử dụng, đi trước và gọi 76 00:03:30,750 --> 00:03:34,650 một chức năng gọi là xử lý đó sẽ điều cuối cùng để làm sạch và ngăn chặn 77 00:03:34,650 --> 00:03:35,500 các máy chủ. 78 00:03:35,500 --> 00:03:39,470 >> Dưới đây là những gì dường như là một vòng lặp vô hạn, dòng đầu tiên trong số đó 79 00:03:39,470 --> 00:03:41,660 hiệu quả là một cuộc gọi đến một chức năng gọi là 80 00:03:41,660 --> 00:03:45,110 thiết lập lại, mà tôi, chúng ta thực hiện sau này trong trật tự 81 00:03:45,110 --> 00:03:47,470 Việt lên một số các quốc gia toàn cầu của chúng tôi. 82 00:03:47,470 --> 00:03:50,480 Sau đó là một dòng mã mà có điều kiện 83 00:03:50,480 --> 00:03:52,576 đang kiểm tra sự trở lại giá trị của kết nối. 84 00:03:52,576 --> 00:03:55,700 Bây giờ hình kết nối như một vị ngữ, cái gì mà trả về đúng hay sai. 85 00:03:55,700 --> 00:03:58,040 Và đúng như vậy, nhưng có một cái gì đó đặc biệt trong kết nối 86 00:03:58,040 --> 00:03:59,960 ở chỗ nó là một cuộc gọi chặn. 87 00:03:59,960 --> 00:04:03,180 Nó sẽ ngồi đó và chờ đợi đến khi trình duyệt của người dùng 88 00:04:03,180 --> 00:04:05,860 cố gắng để kết nối với web này máy chủ và chỉ sau đó nó sẽ 89 00:04:05,860 --> 00:04:10,160 trở về đúng hay sai để chúng tôi tiến hành vào bên trong nếu tuyên bố này. 90 00:04:10,160 --> 00:04:13,870 >> Khi đó, nhận thấy chức năng này để một chức năng được gọi là phân tích cú pháp, mà chúng tôi đã viết, 91 00:04:13,870 --> 00:04:17,230 trong đó phân tích tất cả các octet, tất cả các byte đến từ một trình duyệt 92 00:04:17,230 --> 00:04:21,010 đến máy chủ, vì vậy mà chúng ta có thể bàn tay bạn trở lại cuối cùng một giá trị cho một 93 00:04:21,010 --> 00:04:24,420 của các biến toàn cầu cửa hàng tất cả các byte trong chỉ 94 00:04:24,420 --> 00:04:26,630 các tiêu đề đó yêu cầu, không phải là cơ thể 95 00:04:26,630 --> 00:04:28,920 nếu thật sự có một cơ thể nó. 96 00:04:28,920 --> 00:04:32,980 >> Bây giờ xuống dưới đây chúng ta bắt đầu phân tích những tiêu đề để giải nén 97 00:04:32,980 --> 00:04:35,490 một tập hợp các thông tin mà chúng tôi quan tâm. 98 00:04:35,490 --> 00:04:37,740 Cụ thể, theo đặc điểm kỹ thuật, chúng tôi đầu tiên 99 00:04:37,740 --> 00:04:40,580 muốn yêu cầu dòng, đó là Chỉ là dòng đầu tiên mà 100 00:04:40,580 --> 00:04:45,710 hy vọng rằng một cái gì đó như get giảm hoặc một số con đường và sau đó HTTP 1.1. 101 00:04:45,710 --> 00:04:48,150 Chúng tôi đang sử dụng phép ẩn dụ này của một cây kim trong đống cỏ 102 00:04:48,150 --> 00:04:50,370 để tìm kiếm đặc biệt chars hoặc địa chỉ. 103 00:04:50,370 --> 00:04:53,120 Và quả thật, có một số chức năng trong mã phân phối của chúng tôi 104 00:04:53,120 --> 00:04:56,930 mà bạn cũng có thể tìm thấy hữu ích khi tìm kiếm các giá trị cụ thể. 105 00:04:56,930 --> 00:05:00,630 >> Cuối cùng, chúng tôi sao chép các byte vào một dòng biến gọi là, 106 00:05:00,630 --> 00:05:03,510 trong đó chú ý, quá, chúng tôi đã cấp phát trên stack 107 00:05:03,510 --> 00:05:05,890 bằng cách của một mảng có kích thước động. 108 00:05:05,890 --> 00:05:08,350 Và chúng tôi đang cố tình để tránh gọi malloc 109 00:05:08,350 --> 00:05:11,100 vì một lần nữa, vì Kiểm soát C là 110 00:05:11,100 --> 00:05:14,630 một tính năng tiềm năng của chương trình này, chúng tôi không muốn có mã này bất ngờ 111 00:05:14,630 --> 00:05:17,479 bị gián đoạn bởi các hit người dùng Control C, kết quả trong đó 112 00:05:17,479 --> 00:05:20,270 là tôi có thể không có một cơ hội cho một cái gì đó miễn phí Tôi đã malloced. 113 00:05:20,270 --> 00:05:23,660 Vì vậy, tôi đang cố gắng sử dụng càng nhiều của ngăn xếp là tôi có thể ở đây. 114 00:05:23,660 --> 00:05:26,040 >> Tiếp theo, một bó toàn bộ để dos. 115 00:05:26,040 --> 00:05:28,930 Các đặc điểm kỹ thuật sẽ trình bày chi tiết vào chính xác những gì đang mong đợi ở đây, 116 00:05:28,930 --> 00:05:31,800 nhưng các ý kiến ​​cho bạn một gợi ý về những gì ở phía trước. 117 00:05:31,800 --> 00:05:33,830 Bạn cần đầu tiên để xác nhận các dòng yêu cầu 118 00:05:33,830 --> 00:05:37,760 và chắc chắn rằng nó trông giống như thông số kỹ thuật ngữ pháp, có thể nói, 119 00:05:37,760 --> 00:05:38,541 nói rằng họ nên. 120 00:05:38,541 --> 00:05:41,290 Sau đó, bạn cần phải giải nén một cái gì đó được gọi là các truy vấn, các công cụ ra ngoài 121 00:05:41,290 --> 00:05:44,200 sau dấu hỏi, như chúng ta thấy ở ví dụ Google của chúng tôi 122 00:05:44,200 --> 00:05:46,320 trong chuyển trong một tham số HD. 123 00:05:46,320 --> 00:05:49,050 Sau đó chúng tôi tiếp nhau cùng thư mục gốc của máy chủ web 124 00:05:49,050 --> 00:05:52,520 với con đường đó là trong mà yêu cầu dòng đầu tiên 125 00:05:52,520 --> 00:05:56,010 và hình thành các đường dẫn đầy đủ của các tập tin chúng tôi muốn tìm kiếm. 126 00:05:56,010 --> 00:06:00,300 >> Sau đó, chúng ta sẽ đảm bảo rằng các tập tin tồn tại và có thể đọc được. 127 00:06:00,300 --> 00:06:05,100 Và sau đó chúng ta sẽ phải giải nén nó mở rộng tập tin, .html hoặc .php, 128 00:06:05,100 --> 00:06:09,920 hoặc một số phần mở rộng như vậy mà là ở rất kết thúc của chuỗi yêu cầu. 129 00:06:09,920 --> 00:06:11,940 Tiếp theo là một tổng thể bó mã chúng tôi đã viết 130 00:06:11,940 --> 00:06:15,800 để thực sự tạo ra PHP tạo ra nội dung cho bạn. 131 00:06:15,800 --> 00:06:18,010 Tóm lại, điều này mã mất trong tên 132 00:06:18,010 --> 00:06:20,250 của các tập tin bạn muốn PHP để giải thích. 133 00:06:20,250 --> 00:06:24,630 Chúng tôi vượt qua nó bằng một cái gì đó gọi là một đường ống vào dịch viên PHP. 134 00:06:24,630 --> 00:06:28,060 Lấy lại phản ứng như thể phản ứng là một tập tin đó. 135 00:06:28,060 --> 00:06:32,110 Và sau đó chúng ta lặp qua tập tin của byte, kéo tất cả chúng vào một bộ đệm 136 00:06:32,110 --> 00:06:34,180 để chúng tôi có thể cuối cùng in chúng ra. 137 00:06:34,180 --> 00:06:37,230 >> Thật vậy, tất cả các gọi đây để dprintf 138 00:06:37,230 --> 00:06:40,110 cho phép chúng ta in cái gì được gọi là một mô tả tập tin, mà 139 00:06:40,110 --> 00:06:42,350 chỉ là một số nguyên đại diện cho một tập tin. 140 00:06:42,350 --> 00:06:45,360 Rất tinh thần tương tự, nhưng cơ bản khác nhau từ một tập tin 141 00:06:45,360 --> 00:06:46,620 con trỏ sao. 142 00:06:46,620 --> 00:06:50,260 Chú ý làm thế nào bạn có thể sử dụng cú pháp như printf ở đây để tôi có thể tự động 143 00:06:50,260 --> 00:06:54,000 chèn một cái gì đó giống như chiều dài cho giá trị của một header HTTP 144 00:06:54,000 --> 00:06:55,270 gọi là Content-Length. 145 00:06:55,270 --> 00:06:57,990 Và cuối cùng tôi đã sử dụng chức năng bên phải để thực sự viết 146 00:06:57,990 --> 00:07:00,040 cơ thể để yêu cầu. 147 00:07:00,040 --> 00:07:03,750 >> Thật không may, chúng tôi chỉ thực hiện hỗ trợ cho động 148 00:07:03,750 --> 00:07:05,350 tạo file PHP. 149 00:07:05,350 --> 00:07:08,520 Chúng tôi đã không thực hiện hỗ trợ cho file tĩnh như gifs, và JPEG, 150 00:07:08,520 --> 00:07:10,660 và CSS và HTML. 151 00:07:10,660 --> 00:07:14,450 Điều đó, không may, là để cho các bạn để đáp ứng các mục đích của khách hàng 152 00:07:14,450 --> 00:07:15,090 này để làm. 153 00:07:15,090 --> 00:07:20,050 Vì vậy, trong đó bạn sẽ thấy rằng có không có nhiều cảm hứng trong khối đó, 154 00:07:20,050 --> 00:07:23,520 nhưng nếu bạn cao hơn một chút lên như thế nào chúng tôi đã đi về diễn giải mã PHP, 155 00:07:23,520 --> 00:07:25,520 các chức năng mà bạn sẽ sử dụng là một chút khác nhau. 156 00:07:25,520 --> 00:07:27,561 >> Trong thực tế, bạn có thể mượn một số chức năng 157 00:07:27,561 --> 00:07:29,620 có lẽ từ pháp y Vấn đề đặt, vì 158 00:07:29,620 --> 00:07:32,860 vào cuối ngày tất cả các bạn cần làm ở đây là một khi bạn biết tập tin mở 159 00:07:32,860 --> 00:07:35,690 và một khi bạn biết nó được gọi là Kiểu MIME hoặc loại nội dung, 160 00:07:35,690 --> 00:07:39,040 bạn cần phải đọc trong những byte và bằng cách nào đó nhổ chúng trở lại. 161 00:07:39,040 --> 00:07:41,190 >> Và bây giờ là một tour du lịch này tập tin của các chức năng khác. 162 00:07:41,190 --> 00:07:43,820 Up đầu tiên được kết nối, mà chỉ đơn giản trả về true 163 00:07:43,820 --> 00:07:47,350 khi cuối cùng nó nghe một kết nối từ một người sử dụng. 164 00:07:47,350 --> 00:07:48,786 Tiếp theo là lỗi. 165 00:07:48,786 --> 00:07:52,296 Lỗi, trong khi đó, như một hàm chúng ta viết để xử lý tất cả các khác nhau 400 166 00:07:52,296 --> 00:07:55,360 và trạng thái HTTP 500 mã số mà bạn có thể muốn 167 00:07:55,360 --> 00:07:58,500 để gửi lại cho người sử dụng, cùng với một thông điệp tiêu chuẩn. 168 00:07:58,500 --> 00:08:01,950 >> Tiếp theo là tải, một đặc biệt chức năng thịt, mà mục đích trong cuộc sống 169 00:08:01,950 --> 00:08:06,920 được đọc từ một tập tin con trỏ sao các nội dung của một tập tin vào một bộ đệm toàn cầu 170 00:08:06,920 --> 00:08:09,000 mà chúng tôi tuyên bố trên toàn cầu trên [? chính. ?] 171 00:08:09,000 --> 00:08:12,649 Đây là một chút phức tạp bởi vì chúng tôi phải đọc các byte từ file 172 00:08:12,649 --> 00:08:14,690 nhưng kiểm tra trên mỗi lần lặp cho dù chúng ta đã đã 173 00:08:14,690 --> 00:08:17,600 nhấn cuối của tập tin hay cái gì khác đã đi sai. 174 00:08:17,600 --> 00:08:21,210 Và chúng tôi sử dụng realloc để đảm bảo rằng bất cứ điều gì chúng ta đang sử dụng bộ đệm đang phát triển 175 00:08:21,210 --> 00:08:24,440 và đang phát triển và đang phát triển và luôn ở phía trước của số lượng các byte 176 00:08:24,440 --> 00:08:25,675 rằng chúng ta cần phải phù hợp trong đó. 177 00:08:25,675 --> 00:08:27,550 Handler, trong khi đó, các chức năng mà được 178 00:08:27,550 --> 00:08:30,630 gọi bằng cách có đăng ký Control C như là một tín hiệu 179 00:08:30,630 --> 00:08:32,140 mà chúng tôi muốn chặn. 180 00:08:32,140 --> 00:08:34,070 Chú ý ở đây trong xử lý mà cuối cùng nó 181 00:08:34,070 --> 00:08:36,780 cuộc gọi dừng lại, mà các khóa học dừng các máy chủ web. 182 00:08:36,780 --> 00:08:39,750 Và thật không may, tra cứu không được thực hiện. 183 00:08:39,750 --> 00:08:41,940 Trong tinh thần, đây là một chức năng khá đơn giản. 184 00:08:41,940 --> 00:08:44,900 Với một phần mở rộng tập tin, nó cần để trả lại nó cái gọi là MIME 185 00:08:44,900 --> 00:08:46,320 loại hoặc loại nội dung. 186 00:08:46,320 --> 00:08:49,260 Và chúng tôi chỉ định trong các đặc điểm kỹ thuật những bản đồ đó phải có. 187 00:08:49,260 --> 00:08:52,330 Nhưng bạn cần dịch cuối cùng nó để mã c. 188 00:08:52,330 --> 00:08:56,490 >> Tiếp theo là chức năng tương tự như thịt của chúng tôi được gọi là phân tích cú pháp, mục đích mà trong cuộc sống 189 00:08:56,490 --> 00:08:59,350 là để đọc, không phải từ một tập tin, nhưng từ một kết nối mạng. 190 00:08:59,350 --> 00:09:03,510 Cụ thể, đọc và phân tích Yêu cầu HTTP đó là đến từ một trình duyệt 191 00:09:03,510 --> 00:09:05,940 đến máy chủ để cuối cùng chúng ta có thể phân tích 192 00:09:05,940 --> 00:09:09,530 tại chỉ các tiêu đề trong yêu cầu dòng và trả lại những cho bạn 193 00:09:09,530 --> 00:09:12,720 bằng cách của một bộ đệm toàn cầu chúng ta khai báo bên trên [? chính. ?] 194 00:09:12,720 --> 00:09:14,880 >> Thiết lập lại, trong khi đó, là một chức năng mà chúng ta định nghĩa 195 00:09:14,880 --> 00:09:18,730 đó được gọi là lặp đi lặp lại bên trong của chính mỗi khi bạn đang về 196 00:09:18,730 --> 00:09:20,799 sẵn sàng để bắt đầu nghe cho một kết nối mới 197 00:09:20,799 --> 00:09:22,840 để chúng ta luôn biết trạng thái của các biến của chúng tôi 198 00:09:22,840 --> 00:09:24,870 và vì vậy mà chúng ta cũng đã giải phóng bất kỳ bộ nhớ 199 00:09:24,870 --> 00:09:28,070 có thể đã được phân bổ cho một kết nối mạng trước đó. 200 00:09:28,070 --> 00:09:30,060 Tiếp theo là bắt đầu, chức năng mà chúng tôi đã viết 201 00:09:30,060 --> 00:09:31,920 có chứa một tổng thể nhiều mã mạng 202 00:09:31,920 --> 00:09:34,420 mà cuối cùng bắt đầu các máy chủ web. 203 00:09:34,420 --> 00:09:36,680 >> Lên cuối cùng là hàm gọi là dừng lại, mà 204 00:09:36,680 --> 00:09:38,770 thực hiện chính xác rằng, nó dừng các máy chủ web. 205 00:09:38,770 --> 00:09:42,270 Nhưng trước tiên nó giải phóng bất kỳ bộ nhớ mà vẫn được giao. 206 00:09:42,270 --> 00:09:45,850 Nhưng cuối cùng nó gọi exit mà thậm chí không trả lại điều khiển 207 00:09:45,850 --> 00:09:47,480 chức năng chính của chúng tôi. 208 00:09:47,480 --> 00:09:49,480 Cuối cùng, một trong những hầu hết các kỹ thuật quan trọng 209 00:09:49,480 --> 00:09:52,680 khi triển khai máy chủ web này là sẽ là một chút thử và sai, 210 00:09:52,680 --> 00:09:55,886 có một cửa sổ mở trình duyệt ở bên phải và một cửa sổ terminal tại 211 00:09:55,886 --> 00:09:57,760 trái, các máy chủ giao diện điều khiển cửa sổ, vì vậy mà bạn 212 00:09:57,760 --> 00:10:00,420 có thể xem các thông điệp đó là được hiển thị trên màn hình. 213 00:10:00,420 --> 00:10:04,170 >> Nhưng tốt hơn vẫn sẽ là một phần ba cửa sổ, một cửa sổ terminal thứ hai, 214 00:10:04,170 --> 00:10:07,135 trong đó bạn sử dụng Telnet, việc sử dụng mà được quy định trong spec. 215 00:10:07,135 --> 00:10:09,640 Và Telnet chỉ là một rất chương trình mạng đơn giản 216 00:10:09,640 --> 00:10:12,660 cho phép bạn giả vờ là một trình duyệt trong một cửa sổ 217 00:10:12,660 --> 00:10:14,540 trong khi nói chuyện với các cửa sổ khác. 218 00:10:14,540 --> 00:10:16,830 Bằng cách này bạn có thể nhìn thấy chính xác các lệnh văn bản 219 00:10:16,830 --> 00:10:18,700 mà đang trở lại từ máy chủ cho khách hàng 220 00:10:18,700 --> 00:10:20,810 mà không cần phải poking xung quanh phát triển của chrome 221 00:10:20,810 --> 00:10:24,010 công cụ trong một cách khác giao diện clunkier. 222 00:10:24,010 --> 00:10:29,099