最近在看 haproxy 的源碼,使用了太多 goto 跳轉(zhuǎn),實(shí)在讓人頭大。 當(dāng)一個(gè)代碼塊執(zhí)行完后會(huì)執(zhí)行哪里的代碼呢? 寫幾個(gè)例子來總結(jié)一下規(guī)律吧。 block_1 的代碼執(zhí)...
最近在看 haproxy 的源碼,使用了太多 goto 跳轉(zhuǎn),實(shí)在讓人頭大。 當(dāng)一個(gè)代碼塊執(zhí)行完后會(huì)執(zhí)行哪里的代碼呢? 寫幾個(gè)例子來總結(jié)一下規(guī)律吧。 block_1 的代碼執(zhí)...
代碼分析 調(diào)試過程中你會(huì)對(duì)代碼結(jié)構(gòu)漸漸的有清晰的認(rèn)識(shí),現(xiàn)在我們講一下這中間的全局變量和函數(shù)現(xiàn)在我們依舊是分析 v1.0.0 版本 全局變量 proxy 變量該變量是一個(gè)結(jié)構(gòu)指...
/sbin - Binaries needed for booting, low-level system repair, or maintenance (run level...
在地址框輸入并回車以后,瀏覽器發(fā)送連接請(qǐng)求。 我們?cè)跒g覽器中輸入的大多是一個(gè)網(wǎng)站的域名,需要經(jīng)過DNS解析成IP地址才能發(fā)送頁(yè)面請(qǐng)求。解析順序:1) 瀏覽器緩存,2) 本機(jī)緩...
epoll理解及應(yīng)用 相較于select函數(shù)的epoll函數(shù)的特點(diǎn): epoll只在Linux平臺(tái)下提供支持,不具有兼容性。 無(wú)需每次傳遞監(jiān)視對(duì)象信息。 無(wú)須編寫以監(jiān)視狀態(tài)變...
分離I/O流 上一章中使用文件描述符的套接字沒有辦法半關(guān)閉,即沒有辦法關(guān)閉自己的發(fā)送端,而仍可接收對(duì)方的消息。因?yàn)樽x寫兩個(gè)模式的FILE指針都是基于同一個(gè)文件描述符創(chuàng)建的。 ...
標(biāo)準(zhǔn)I/O函數(shù)的優(yōu)點(diǎn) 移植性好 + 利用緩沖提高性能。分別使用系統(tǒng)函數(shù)和標(biāo)準(zhǔn)I/O函數(shù)的例子對(duì)比(注意書中少了一個(gè)頭文件): 后者幾乎瞬間就完成了。 標(biāo)準(zhǔn)I/O函數(shù)的缺點(diǎn) 不...
多播 多播是基于UDP的。多播數(shù)據(jù)包的格式與UDP數(shù)據(jù)包相同。多播組是D類IP地址(224.0.0.0~239.255.255.255)。多播需要借助路由器完成。源主機(jī)只發(fā)送...
send & recv 函數(shù) 可選項(xiàng)含義sendrecv示例MSG_OOB傳輸一個(gè)字符的帶外數(shù)據(jù)**oob_recv.c和oob_send.cMSG_PEEK驗(yàn)證輸入緩沖中是...
理解select函數(shù)并實(shí)現(xiàn)服務(wù)器端 select函數(shù)調(diào)用過程: select函數(shù)調(diào)用完成后,fd_set變量會(huì)發(fā)生變化,除發(fā)生變化的文件描述符對(duì)應(yīng)位不變,其余位均變?yōu)?。示例...
進(jìn)程間通信的基本概念 為了完成進(jìn)程間通信,需要?jiǎng)?chuàng)建管道。管道并非屬于進(jìn)程的資源,而是像套接字一樣,屬于操作系統(tǒng)。 用這個(gè)函數(shù)可以實(shí)現(xiàn)父子進(jìn)程的單向、雙向通信: 但使用一個(gè)管道...
初始創(chuàng)建虛擬機(jī)分配的硬盤空間太小了,后面想增大一些,發(fā)現(xiàn)在ESXi UI上設(shè)置好了空間以后并沒有變。 原來是因?yàn)閯澏╲g時(shí)已經(jīng)固定了容量,lv容量從vg擴(kuò)充,第一次已經(jīng)將vg...
進(jìn)程概念及應(yīng)用 并發(fā)服務(wù)器端實(shí)現(xiàn)模型和方法: 多進(jìn)程服務(wù)器(Chap10&11) 多路復(fù)用服務(wù)器(Chap12) 多線程服務(wù)器(Chap18) 進(jìn)程:占用內(nèi)存空間的正在運(yùn)行的...
套接字可選項(xiàng)和I/O緩沖大小 可選項(xiàng)的讀取和設(shè)置通過如下兩個(gè)函數(shù)完成: getsockopt方法調(diào)用示例: 套接字類型SO_TYPE是一個(gè)只讀可選項(xiàng),意味著套接字一旦創(chuàng)建就不...
域名系統(tǒng) 在Linux系統(tǒng)中查詢自己計(jì)算機(jī)中注冊(cè)的默認(rèn)DNS服務(wù)器地址,可以輸入如下命令: 計(jì)算機(jī)內(nèi)置的默認(rèn)DNS服務(wù)器并不知道網(wǎng)絡(luò)上所有域名的IP地址信息。若該DNS服務(wù)器...
基于TCP的半關(guān)閉 Linux的close函數(shù)不夠優(yōu)雅是因?yàn)樵谒蟛粌H無(wú)法傳輸數(shù)據(jù),也不能接收數(shù)據(jù)。但TCP協(xié)議原本的設(shè)計(jì)不是這樣的。因此需要一個(gè)函數(shù)來僅斷開一個(gè)方向的流。...
實(shí)現(xiàn)基于UDP的服務(wù)器端/客戶端 TCP協(xié)議中,需要?jiǎng)?chuàng)建一個(gè)服務(wù)器端套接字,除此之外有幾個(gè)客戶端連接,就需要額外多少個(gè)接受連接的套接字。而UDP協(xié)議中只有一個(gè)套接字。一個(gè)UD...
已知字符串長(zhǎng)度情況下完善回聲客戶端 服務(wù)端同上一章。 定義應(yīng)用層協(xié)議 原書中有些bug,服務(wù)端接收到的操作數(shù)個(gè)數(shù)沒有轉(zhuǎn)換成int。經(jīng)fix后代碼見附錄,運(yùn)行結(jié)果如下: TCP...
實(shí)現(xiàn)基于TCP的服務(wù)器端 實(shí)現(xiàn)基于TCP的客戶端 客戶端的IP地址就是主機(jī)的IP地址,端口在調(diào)用connect()時(shí)自動(dòng)由內(nèi)核隨機(jī)分配。發(fā)生以下兩種情況之一就會(huì)返回: 服務(wù)器...
分配給套接字的IP地址與端口號(hào) 只需通過IP地址的第一個(gè)字節(jié)即可判斷網(wǎng)絡(luò)地址占用的字節(jié)數(shù):A類地址的首字節(jié)范圍:0~127B類地址的首字節(jié)范圍:128~191C類地址的首字節(jié)...