讀過的書,留下的跡 Unix網路程式設計

2021-07-31 18:21:36 字數 3506 閱讀 8847

因這本書知道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 連線表示式 連線型別 任意連線形式 內連線 左...