×

HTTP 服務(wù)器程序編寫(xiě)過(guò)程總結(jié)

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-08 11:17:09

用于從已完成連接隊(duì)列頭返回下一個(gè)已完成連接,如果已完成連接隊(duì)列為空,那么進(jìn)程就會(huì)被阻塞。因此調(diào)用了accept函數(shù)之后,進(jìn)程就會(huì)被阻塞,直到有新的請(qǐng)求到來(lái)。 第一個(gè)參數(shù)sockfd是客戶端的套接字描述符,第二個(gè)是客戶端的套接字地址結(jié)構(gòu),第三個(gè)是套接字地址結(jié)構(gòu)的長(zhǎng)度。

 accept函數(shù)

<div
002UASMrzy7605pjKJv15&690.jpg
用于從已完成連接隊(duì)列頭返回下一個(gè)已完成連接,如果已完成連接隊(duì)列為空,那么進(jìn)程就會(huì)被阻塞。因此調(diào)用了accept函數(shù)之后,進(jìn)程就會(huì)被阻塞,直到有新的請(qǐng)求到來(lái)。
 
第一個(gè)參數(shù)sockfd是客戶端的套接字描述符,第二個(gè)是客戶端的套接字地址結(jié)構(gòu),第三個(gè)是套接字地址結(jié)構(gòu)的長(zhǎng)度。
 
如果accept成功,那么返回值是由內(nèi)核自動(dòng)生成的全新描述符,代表所返回的客戶端的TCP連接。
 
對(duì)于accept函數(shù),第一個(gè)參數(shù)稱為監(jiān)聽(tīng)套接字描述符,返回值稱為已連接套接字。服務(wù)器僅創(chuàng)建監(jiān)聽(tīng)套接字,它一直存在。已連接套接字由服務(wù)器進(jìn)程接受的客戶連接創(chuàng)建,當(dāng)服務(wù)器完成某個(gè)連接的響應(yīng)后,相應(yīng)的已連接套接字就被關(guān)閉了。
 
accept函數(shù)返回時(shí),會(huì)返回套接字描述符或出錯(cuò)指示的整數(shù),以及引用參數(shù)中的套接字地址和該地址的大小。如果對(duì)返回值不感興趣,可以把兩個(gè)引用參數(shù)設(shè)為空。
 
accept之后,一個(gè)TCP連接就建立起來(lái)了,接著,服務(wù)器就接受客戶端的請(qǐng)求信息,然后做出響應(yīng)。
 
recv和send函數(shù)
 
分別用于從客戶端讀取信息和發(fā)送信息到客戶端。在此不做過(guò)多的解釋。
 
套接字地址結(jié)構(gòu)大小和值-結(jié)果參數(shù)
 
可以看到,在bind函數(shù)和accept函數(shù)里面,都有一個(gè)套接字地址結(jié)構(gòu)長(zhǎng)度的參數(shù),區(qū)別在于一個(gè)是值形式,另一個(gè)是引用形式。套接字地址結(jié)構(gòu)的傳遞方式取決于該結(jié)構(gòu)的傳遞方向:是從進(jìn)程到內(nèi)核,還是從內(nèi)核到進(jìn)程。
 
1、從進(jìn)程到內(nèi)核:bind、connect、sendto。
 
函數(shù)將指針和指針?biāo)竷?nèi)容的大小都傳給了內(nèi)核,于是內(nèi)核知道到底需要從進(jìn)程復(fù)制多少數(shù)據(jù)進(jìn)來(lái)。
 
2、從內(nèi)核到進(jìn)程:
 
accept、recvfrom、getsockname、getperrname。
 
這四個(gè)函數(shù)的結(jié)構(gòu)大小是以只引用的方式傳遞。
 
因?yàn)楫?dāng)函數(shù)被調(diào)用時(shí),結(jié)構(gòu)大小是一個(gè)值,它告訴內(nèi)核該結(jié)構(gòu)的大小,這樣內(nèi)核在寫(xiě)該結(jié)構(gòu)時(shí)不至于越界;當(dāng)函數(shù)返回時(shí),結(jié)構(gòu)大小又是一個(gè)結(jié)果,它告訴內(nèi)核在該結(jié)構(gòu)中究竟存儲(chǔ)了多少信息。
 
HTTP響應(yīng)報(bào)文
 
發(fā)送響應(yīng)給客戶端時(shí),發(fā)送的報(bào)文要遵循HTTP協(xié)議,HTTP的響應(yīng)報(bào)文格式如下:
 
第一行status-line,狀態(tài)欄,格式:HTTP版本 狀態(tài)碼 狀態(tài)碼代表文字headers是返回報(bào)文的類型,長(zhǎng)度等信息,接著是一個(gè)空行,然后是響應(yīng)報(bào)文的實(shí)體。
 
一個(gè)HTTP響應(yīng)報(bào)文例子:
 
最后close函數(shù)關(guān)閉套接字,時(shí)刻保持關(guān)閉文件描述符是一個(gè)很好的編程習(xí)慣。
 
以上就是我們關(guān)于HTTP服務(wù)器程序編寫(xiě)的簡(jiǎn)單介紹,希望對(duì)大家有所幫助。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading