天天看點

unix 網絡程式設計 第三章

包裹函數 就是對有錯誤傳回值的函數的封裝。在unix網絡程式設計中用大寫表示。

err_sys  必須要errno 的值才能輸出錯誤?

線程函數遇到錯誤的時候 不設定errno的值,而是把error的值作為函數的傳回值。

必須檢查某個确定的錯誤,并處理它,而不是終止程序運作。

Unix errno 值 : 每當一個unxi函數中發生錯誤的時候,全局變量将被設定成一個訓示消息類型的正數,函數本身通常傳回-1

。err_sysy 檢查errno 變量 并輸出其相應的出錯資訊。值0 表示無錯誤。errno的值 隻在函數發生錯誤的時候設定。如果函數

不傳回錯誤。errno的值就無法确定。具有以E打頭的全大寫字母名稱。把errno存放全局變量,不适合共享全局變量的多線程。

位址轉換函數 就是把位址的文本表達轉化成套接口位址結構中的二進制。如 inet_addr、inet_ntoa.轉化函數是協定相關的。一個較好的技術是把套接口位址

結構作為不透明對象來操作。做到與協定無關。

網絡位元組序 和主機位元組序。TCP在套接口位址結構中總是以網絡位元組序來存儲。

套接口位址總是通過指針來傳遞,通過指針來取得此參數的套接口函數必須 處理所支援的任何協定族的套接口位址結構。

遇到的問題:如何聲明指針類型: ANSI C 中有簡單的解決辦法,通過指針類型void*。 但是套接口函數實在ANSI C 之前定義的,是以

定義了一個通用的套接口位址函數。

是以  在一些套接口函數中要做類型轉換。

如: int bind( int,struct sockaddr* ,socklen_t ) socklen_t   是無符号32位整形類型。

套接口位址分為 四種: ipv4(固定長度)  ipv6(固定長度)  unix域(可變長度)、 資料鍊路結構(可變長度)。

套接口位址傳遞方式 取決于傳遞方向: 是從程序傳遞給核心,還是從核心傳遞給程序。

問題:為什麼從核心到程序傳遞套接口函數的時候,參數是指針,而不用整數?

因為是值——結果參數。結構的大小,是為了防止越界。

套接口函數 與 記憶體中的協定棧接口。

位元組排序函數:

16位整數 , 由2個位元組組成,低序位元組存儲在起始位址,稱為小端位元組序。高序位元組存儲在起始位址,稱為大端位元組序。

因為小端位元組序 和大端位元組序的格式 都有系統使用,把某給定系統所使用的位元組序 稱為主機位元組序。

判斷主機位元組序的程式。

位元組序轉換函數。

htons   s看成16位端口号、 l 看成32位 ip 位址。 

主要看基本socket連接配接。

會什麼要求轉研發:

unix網絡程式設計、(2個月)配置檔案讀取。記憶體配置設定、tcp、ip網際網路連接配接。(2個月)設計模式。(1個月)工作中遇到的問題。伺服器架構。

判斷伺服器性能、穩定的條件。彙編。

加密、解密算法。壓縮、解壓縮算法。UML。

對一些東西的要求是了解原理、知道應用。

壓縮、解壓縮、 伺服器同步負載。