unix 網路程式設計 第三章

2021-09-30 07:48:56 字數 1260 閱讀 2068

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

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

執行緒函式遇到錯誤的時候 不設定errno的值,而是把error的值作為函式的返回值。

必須檢查某個確定的錯誤,並處理它,而不是終止程序執行。

unix errno 值 : 每當乙個unxi函式中發生錯誤的時候,全域性變數將被設定成乙個指示訊息型別的正數,函式本身通常返回-1

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

不返回錯誤。errno的值就無法確定。具有以e打頭的全大寫字母名稱。把errno存放全域性變數,不適合共享全域性變數的多執行緒。

結構作為不透明物件來操作。做到與協議無關。

網路位元組序 和主機位元組序。tcp在套介面位址結構中總是以網路位元組序來儲存。

套介面位址總是通過指標來傳遞,通過指標來取得此引數的套介面函式必須 處理所支援的任何協議族的套介面位址結構。

遇到的問題:如何宣告指標型別: ansi c 中有簡單的解決辦法,通過指標型別void*。 但是套介面函式實在ansi c 之前定義的,所以

定義了乙個通用的套介面位址函式。

所以  在一些套介面函式中要做型別轉換。

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

問題:為什麼從核心到程序傳遞套介面函式的時候,引數是指標,而不用整數?

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

套介面函式 與 記憶體中的協議棧介面。

位元組排序函式:

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

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

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

位元組序轉換函式。

htons   s看成16位埠號、 l 看成32位 ip 位址。 

主要看基本socket連線。

會什麼要求轉研發:

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

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

加密、解密演算法。壓縮、解壓縮演算法。uml。

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

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

《UNIX 網路程式設計》 第三章課後習題第三題

按自己的想法實現的,肯定有更好的實現方式,放在這裡留個紀念。從下面開始 include include include include include include 具體的轉換過程,不做詳細注釋,有更好的實現方式 intinet pton loose int family,const char s...

《UNIX 網路程式設計》 第三章課後習題第三題

試寫乙個名為inet pton loose的函式,它能處理如下情形 如果位址族為af inet且inet pton返回0,那就呼叫inet aton看是否成功 類似地,如果位址族為af inet6且inet pton返回0,那麼就呼叫inet aton看是否成功,若成功返回其ipv4對映的ipv6位...

《UNIX網路程式設計》 第三章 套接字程式設計簡介

ipv4的位址結構為sockaddr in,ipv6為sockaddr in6,鏈路協議sockaddr dl,unix域為sockaddr un,儲存為sockaddr storage。套接字位址結構總是以引用形式來傳遞!struct in addr struct sockaddr in ipv4...