因這本書知道richard stevens這位神級大牛,感慨乙個人如何能寫了這麼多本被奉為聖經級別的it圖書,我們又有什麼理由不去讀這些書呢?
(1)套接字位址結構
(2)位元組排序
位元組序轉換函式
// h for host, n for network, s for short, l for long
unit16_t htons(unit16_t host16bitvalue);
unit32_t htonl(unit32_t host32bitvalue);
unit16_t ntohs(unit16_t net16bitvalue);
unit32_t ntohl(unit32_t net32bitvalue);
(3)位址轉換函式
p代表presentation,n代表numeric
(1)tcp套接字各函式呼叫
(2)fork和exec
每個檔案或套接字都有乙個引用計數器,父程序呼叫close只是導致相應描述符的引用計數器減1,想要立即關閉,應該呼叫shutdown
(1)正常終止
(2)sigchld訊號處理
(3)accept返回前連線終止
* posix指定返回的errno必須是econneconnaborted
(4)伺服器程序終止(伺服器能發出fin)
(5)伺服器主機奔潰(伺服器不能發出fin)
(6)伺服器主機奔潰後重啟
(7)伺服器關機
(8)穿越socket傳輸二進位制
核心一旦發現程序指定的乙個或多個io條件就緒,它就通知程序。這個能力稱為io復用
(1)io模型
(2)select、poll、epoll函式
select
int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
poll
int poll (struct pollfd *fds, unsigned int nfds, int timeout);
epoll
epoll提供了三個函式,epoll_create,epoll_ctl和epoll_wait,epoll_create是建立乙個epoll控制代碼;epoll_ctl是註冊要監聽的事件型別;epoll_wait則是等待事件的產生
主要有兩個函式:getsockopt和setsockopt
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
upd程式設計所用的函式
一般來說,大多數tcp伺服器是併發的,而大多數udp伺服器是迭代的。每乙個udp套接字都有乙個接收緩衝區,到達該套接字的每個資料報都進入這個套接字緩衝區。
(1)udp的connect函式
已連線的udp比未連線的udp有以下不同
當應用程序要給同一目的位址傳送多個資料報時,顯式連線套接字效率更高。因為未連線udp每次傳送資料均需要連線該udp套接字
本章涉及的函式與網域名稱有關係,需呼叫dns伺服器獲取
(1) 獲取主機
主機資料結構
struct hostent ;
/* 由網域名稱獲取 */
struct hostent *gethostbyname(const char *hostname);
/* 由二進位制ip位址獲取 */
struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family);
(2)獲取服務
struct servent ;
/* 根據給定名字查詢響應服務 */
struct servent *getservbyname(const char *name, const char *proto);
/* 根據給定埠號和可選協議查詢響應服務 */
struct servent *getservbyport(int port, const char *proto);
(3)getaddrinfo、getnameinfo函式
(4)可重入性
ipv4和ipv6客戶與伺服器互操作性總結
所有服務,如ftp、telnet、rlogin、tftp等,都有乙個程序與之關聯,這些程序都是在系統自舉階段從/etc/rc檔案中啟動,而且每個程序幾乎執行相同的啟動任務:建立乙個套接字,把本伺服器的眾所周知埠**到該套接字,等待乙個連線或者資料報,然後產生子程序。存在兩個問題:
(1)所有這些守護程序含有幾乎相同的啟動**,即表現在建立套接字上,也表現在演變成守護程序上
(2)每個守護程序在程序表上佔據乙個表項,然而它們大部分時間處於睡眠狀態
可用網際網路超級伺服器(即inetd守護程序)解決上述問題
(1)通過由inetd處理普通守護程序的大部分啟動細節以簡化守護程序的編寫
(2)單個程序就能為多個伺服器等待外來的客戶請求,以此取代每個服務乙個程序的做法
(1)套接字超時
前兩個技術適用於任何描述符,而第三個技術僅僅適用於套接字描述符
(2)套接字和標準i/o
套接字i/o:包括read和write這兩個函式及它們的變體
標準i/o:這個函式由ansi標準規範,意在便於移植到支援ansi的非unix系統上
unix域協議是在單個主機上執行客戶/伺服器通訊的一種方法,可視為ipc方法之一
udp的優勢
udp的劣勢 建議
給udp增加可靠性
讀過的書,留下的跡 Java併發程式設計實戰
最近發現有時候看完一本書,時間久了容易忘記,看書不總結思考效果大打折扣,故打算寫這一系列文章,一是為了整理書中的要點,幫助自己消化理解 二是勉勵自己多看書思考。文章中不會把書中內容講解的非常詳細,只是總結概括,適合已經閱讀過該書的讀者。原子性 加鎖機制可見性 發布與逸出 執行緒封閉 不可變性 fin...
讀過的書,留下的跡 高效能MySQL(第3版)
最近發現有時候看完一本書,時間久了容易忘記,看書不總結思考效果大打折扣,故打算寫這一系列文章,一是為了整理書中的要點,幫助自己消化理解 二是勉勵自己多看書思考。文章中不會把書中內容講解的非常詳細,只是總結概括,適合已經閱讀過該書的讀者。基準測試是針對系統設計的一種壓力測試 測試指標 基準測試常見錯誤...
讀過的書,留下的跡 資料庫系統概念
最近發現有時候看完一本書,時間久了容易忘記,看書不總結思考效果大打折扣,故打算寫這一系列文章,一是為了整理書中的要點,幫助自己消化理解 二是勉勵自己多看書思考。文章中不會把書中內容講解的非常詳細,只是總結概括,適合已經閱讀過該書的讀者。1 基本型別 1 連線表示式 連線型別 任意連線形式 內連線 左...