Govornik: Zdaj pa dive v kodo distribucije in si oglejte okviru v kateri kodo pisanjem se dogaja, da je treba delovati. Ob koncu dneva, boste za izvajanje celota spletni strežnik. Vendar smo pod pogojem, ste z okostjem Koda, ki imajo neko funkcijo, še posebej povezano z mreženjem. Oglejmo pogled. Torej, tukaj gor proti vrhu datoteke je kup za funkcijo preizkusite makro zahteve. Zdaj je to samo funkcija c, pri čemer po kup strani man boste morali določiti nekatere Te konstante da bi bilo res ali da je celo posebne številke tako, da imate dostop do nekaterih funkcij. V nasprotnem primeru se boste na črno in ne boste imeli dostopa. Tako da sem to storil s pomočjo branja strani man. Sedaj spodaj, v proge 15 do 17, smo ima cel kup omejitev prijavljenih. In smo izposodili od teh priljubljen spletni strežnik imenuje Apache. In to so le številke, ki se bodo da omejijo skupno število bajtov, ki so dovoljene v različnih kontekstih za zahtevo HTTP da je brskalnik dovoljeno, da me pošljejo. Nato definiramo oktetov. Zdaj oktet je samo fancy način rekel bajt, ali osem bitov. Izkazalo se je v minulih bajt ni nujno osem bitov, tako oktet je vedno osem bitov. Torej, v tem primeru smo sprejeti Kaj je skupnega pri mreženju svet kliče osem bajtov okteta. Tukaj sem navedla, da bo oktetov bilo 512, tako da je podobno kot v forenziki ko smo prebrali kup bajtov naenkrat, tudi tukaj, bomo prebrali kup oktetov naenkrat. Naslednja cel kup datotek z glavami. Kako sem vedel, da te vključiti? Pa sem le prebral človek strani za več funkcij da bomo uporabili v tej razdelitvi Koda in vključujejo v tiste Naročeno mi je bilo, da. In zdaj imamo vrsto podatkov. Mi smo razglasila oktet biti char. In bomo videli pozneje, da je to uporabljajo v celotnem zakoniku. In smo prijavljeni cel kup prototipov, in bomo hitro sprehod skozi Vsaka od teh funkcij. Končno, in morda najbolj pomembno, da v moti na tej točki v Zgodba je, da obstaja so v bistvu celotno kup globalnih spremenljivk na vrhu datoteke, koren, CFD, SFD, zahteva, datotek in telo. Zdaj na splošno, s toliko globalna spremenljivke ali globalne spremenljivke na vse, ni praksa nazaj. Vendar se izkaže, da smo tudi z tehniko, imenovano ravnanje signal, kasneje v kodeksu, ki nam omogoča, da zazna uporabnik našli nekaj kot CTRL C in zaprli Strežnik elegantno. In da bi to naredil elegantno in dejansko prost up spomin, moramo imeti dostop do te globalne spremenljivke. In zdaj pa si oglejte na glavni, ki poganja celoto tega programa. Prvič, na vrhu tu imajo številko napake spremenljivko zdi, da ne imajo vrsto, ampak to je ker je to dejansko definirana v datoteki errno.h napaka, ki je vključen višje. Če vam človek errno dejansko glej opredelitev za to stvar, boste videli, da je to posebna globalna spremenljivka, ki se določi s kopico funkcij ni napisal pri nas, vendar jih avtorji Linux in drugi sistemi za dejansko ustanovitev Številka na to spremenljivo, ko nekaj gre narobe, tako da lahko na svetovni ravni ugotovimo, kaj je naredil narobe. Sedaj spodaj boste videli novo Tehnika morda z uporabo getopt, funkcija, ki pomaga razčleniti ukaza argumenti linije, tako da ne bomo morali sitnost časa zapravili kipec izvedeti, kako razčleniti nekaj podobnega 8080, ali dash p ali pomišljaj h, da bi dobili pomoč. getopt v bistvu pa to za nas. Glejte stran man za več. Nato naredimo nekaj napak preverjanje se prepričajte, da je številka vrat je v določeno območje v spec. Nato smo videli klic s funkcijo začeti, katerega opredelitev bomo poglej v trenutku, in kot njegovo ime predlaga, ta zažene spletni strežnik. Tukaj imamo klic funkcije imenovan signal, ki pravi, če in ko slišiš Nadzorna C od Uporabnik je tipkovnica, pojdi naprej in pokličite Funkcija se imenuje trener, ki se dogaja za končno čiščenje stvari in stop strežnik. Spodaj, da je tisto, kar se zdi, da neskončna zanka, prva linija, ki dejansko je klic na funkcijo imenovano ponastaviti, kar sami smo izvajati kasneje zaradi sprostiti nekaj naših svetovnih držav. Potem, da je linija kodo, ki pogojno preverja vrnitev Vrednost povezani. Zdaj povezani izgleda kot predikat, nekaj, kar se vrne true ali false. In to počne, vendar pa je nekaj posebnega v povezani v tem, da je blokiranje klicev. To bo tam sedeti in čakati dokler brskalniku uporabnika poskuša povezati s tem spletu strežnik in šele potem se bo ta vrne true ali false, da bomo nadaljevali v notranjost tega, če izjave. Ko bo tam, opazili to funkcijo Funkcija se imenuje razčleni, kar smo zapisali, ki razčleni vse oktetov, vse bajtov, ki prihajajo iz brskalnika na strežnik, tako da bomo lahko ročno ste nazaj na koncu vrednost enega od teh globalnih spremenljivk, shranjuje vse bajtov v pravkar na Glave da zahtevek, ne telo če je bilo dejansko telo z njo. Sedaj spodaj začnemo razčleniti tiste glave izvleči podmnožica informacij da nam je mar. Natančneje, na specifikacije, smo najprej želel zaprositi za linijo, ki je samo, da je prva linija, ki upajmo, da pravi, da nekaj podobnega get slash ali kakšno pot in nato HTTP 1.1. Mi smo z uporabo te metafore z iglo v senu iskati predvsem znakov ali naslovov. In res, da je število funkcije v našem distribucijskem kodo da vas, preveč, lahko najdete pomoč ko iščejo določene vrednosti. Konec koncev, smo kopiranje teh bajtov v spremenljivo imenuje linije, ki je opazil, preveč, ki smo jih dodeljenih na stack s pomočjo dinamično velika izbira. In smo namerno poskušali da bi se izognili kliče malloc ker enkrat, ker o Nadzor je C potencial značilnost tega programa smo Ne želim, da se to kodo nenadoma prekinjen z uporabniškim hitting Nadzor C, zaradi česar je, da jaz ne bi imel priložnost prosti nekaj sem malloced. Tako skušam čim več uporabljati dimnika je, da sem lahko tukaj. Next up, cel kup za dos. Specifikacija bo razložiti na kaj točno tukaj se pričakuje, vendar komentarje vam namig, kaj je pred nami. Morate najprej potrditi zahtevo linijo in poskrbite, da je videti kot specifikacije slovnico, tako rekoč, pravi, da bi morala. Potem boste morali izločiti nekaj imenovano poizvedbo, stvari ven po vprašajem, kot videli smo z našo Google primer na prehodu v parametru HD. Nato smo združevanje skupaj koren spletni strežnik s potjo, ki je v da zahteva prva vrstica in tvori celotno pot Datoteka želimo iskati. Zatem bomo zagotoviti da datoteka obstaja in je berljiva. In potem bomo v citat njenih Končnica datoteke, .html ali .php, ali nekaj tako razširitev, ki je na Zelo konec niza zahtevane. Naslednji je celota kup kode smo pisali dejansko ustvarjajo PHP ustvari vsebino za vas. Na kratko, to Koda bo v imenu datoteke, ki jo želite PHP razložiti. Mi je mimo nekaj, kar ti cev v PHP tolmača. Dobil nazaj odgovor, kot da Odziv je bila datoteka sama. In potem smo Ponovil več, da je datoteka bajte, jih vse vleče v eno vmesno tako da bomo lahko na koncu jih natisnete. Dejansko vsi ti poziva tukaj za dprintf nam omogoča, da natisnete nekaj imenovana datoteka deskriptor, ki je le število ki predstavlja datoteko. Zelo podobno v duhu, ampak bistveno drugačna od datoteke zvezda kazalec. Opazili, kako lahko uporabite sintakso podobno printf tukaj, tako da sem lahko dinamično vstavite nekaj podobnega dolžine za vrednost na glavi HTTP imenuje Content-Length. In na koncu sem uporabil Funkcija pravica dejansko napisati Organ na zahtevo. Na žalost, smo izvajali le podpora za dinamično generirane datoteke PHP. Nismo izvajati podporo statične datoteke, kot gif in jpeg, in CSS in HTML datotek. Da, žal, je prepuščeno vam da se odzovejo na potrebe odjemalca to storiti. Torej, tam boste ugotovili, da obstaja ni veliko navdiha v tem bloku, Ampak, če ste malo višje gor, kako smo šli o razlagi PHP kodo, funkcije, ki jih boste uporabili so malo drugačni. V resnici, si lahko sposodim nekatere funkcionalnosti morda iz forenzike problem set, ker Na koncu dneva vse, kar je potrebno naredite je, ko veš, kaj odprta datoteka in ko veš, da je tako imenovani Tip MIME ali vrsto vsebine, boste morali prebrati v teh bajtov in jih nekako pljunil nazaj ven. In zdaj ogled tega dosjeju za druge funkcije. Up je prvi povezan, ki preprosto vrne true ko je končno sliši povezava od uporabnika. Naslednji je napaka. Napaka, medtem, kot je funkcija smo pisal ročaj vse drugačne 400 in 500 HTTP stanje kode, ki bi si želeli poslati nazaj uporabniku, skupaj s standardnim sporočilom. Naslednji je obremenitev, zlasti mesnat funkcija, katere namen v življenju je brati iz datoteke zvezda kazalec Vsebino datoteke v globalni pufra da smo prijavljeni na svetovni ravni zgoraj [? Glavni. ?] To je malce zapleteno, saj mi prebrati bajtov iz datoteke vendar pa preverite na vsaki ponovitvi če smo jih že hit konec datoteke ali nekaj drugega je narobe. In bomo uporabili realloc se prepričajte, da karkoli buffer smo s pomočjo narašča in raste in raste in vedno pred bivanjem števila bajtov da moramo, da se prilega v tam. Handler, medtem, je funkcija, ki dobi imenovana s pomočjo ob registrirani Nadzorna C kot signal da želimo prestrezanje. Opazili tukaj v vodniku da ji na koncu poziva, naj ustavi, kar je seveda ustavi spletni strežnik. In na žalost, lookup se ne izvaja. V duhu, to je dokaj enostavna naloga. Glede na razširitev datoteke, ki jih potrebuje vrniti to je tako imenovani MIME tip ali vrsto vsebine. In smo v specifikaciji kaj je treba, da je preslikava biti. Vendar morate prevesti je na koncu c kode. Naslednji je naša podobno mesnat funkcija imenovano razčleni, katerih namen v življenju je, da se glasi, ne iz datoteke, ampak od omrežne povezave. Natančneje, branje in razčlenjevanje Zahteva HTTP, ki je prišel iz brskalnika s strežnikom, tako da končno bomo lahko razčleniti na samo glavo na zahtevo linijo in se vrniti tiste, ki vas s pomočjo globalnega pufra, da smo jo zgoraj [? Glavni. ?] Reset, medtem, je Funkcija, ki jih opredeljujejo da dobi imenuje ponavljajočim notranjosti glavnega vsakem trenutku ste o pripravljeni, da začnete poslušanje za novo povezavo tako da vedno vemo, Stanje naših spremenljivk in tako, da smo jih tudi osvobojeni pomnilnika, ki Morda so bila dodeljena za Prejšnja omrežna povezava. Naslednji je začetek, Funkcija, ki jih je napisal ki vsebuje celotno veliko mreženja kodo da končno začne spletnega strežnika. Zadnja up je funkcija imenuje stop, ki počne točno to, da ustavi spletni strežnik. Ampak najprej se sprosti pomnilnika, ki še ni bila dodeljena. Vendar je na koncu poziva izhod celo brez vrne nadzor na naše glavno funkcijo. Končno, eden najpomembnejših tehnik Pri izvajanju tega Spletni strežnik je bo malo poskusov in napak, ki ima eno okno brskalnika odprto na desno okno terminal na levo, strežniki konzole okno, tako da boste lahko vidite sporočila, ki so se prikaže na zaslonu. Vendar je še vedno bolje, da tretja okna, drugo terminalsko okno, v kateri boste uporabili Telnet, navada za katere je predpisana v spec. In Telnet je samo zelo preprost program omrežja ki vam omogoča, da se pretvarjamo, da je brskalnik v enem oknu medtem ko se pogovarjam z drugo okno. Na ta način si lahko ogledate natanko ukazi tekstualni ki se vrača od strežnika do odjemalca ne da bi drezal okoli razvijalec za Chrome orodja drugače clunkier vmesnik.