UNIX網路程式設計學習(4)--值-結果引數
我們已經知道,當把套介面地址結構傳遞給套介面函式時,總是通過指標來傳遞的,即傳遞的是一個指向結構的指標。結構的長度也作為引數來傳遞,其傳遞方式取決於結構的傳遞方向:從程式到核心,還是從核心到程式。
1、從程式到核心傳遞套介面地址結構有3個函式:bind、connect和sendto,這3個函式的一個引數是指向套介面地址結構的指標,另一個是結構的整數大小,例如:
struct sockaddr_in serv;
/* fill in serv{} */
connect( sockfd, (SA*)&serv, sizeof(serv) );
由於指標和指標所指結構的大小都傳遞給核心,所以從程式到核心要確切拷貝多少資料是知道的,如圖3.7所示。
套介面地址結構大小的資料型別確切地說應該是socklen_t,而不是int,POSIX建議將socklen_t定於為uint32_t。
2、與前面的傳遞方向相反,從核心到程式傳遞套介面地址結構有四個函式:accept、recvfrom、getsockname 和 getpeername。這4個函式的兩個引數是:指向套介面地址結構的指標和指向表示結構大小的整數的指標,例如:
struct sockaddr_un cli; /* Unix domain */
socklen_t len;
len = sizeof(cli);
getpeername(unixfd, (SA*) &cli, &len )
/* len may have changed */
為何將結構大小由整數改為指向整數的指標呢?這是因為:當函式被呼叫時,結構大小是一個值(value, 此值告訴核心該結構的大小,使核心在寫此結構時不至於越界),當函式返回時,結構大小又是一個結果(result,它告訴程式核心在此結構中確切儲存了多少資訊),這種引數叫做值-結果引數(value-result)。
當使用值-結果引數作為套介面地址結構的長度時,如果套介面地址結構是定長的,則從核心返回的值也是定長的,如對於IPv4,sockaddr_in是16;對於IPv6,sockaddr_in6是28。但對於變長的套介面地址結構(如Unix域的sockaddr_un),返回值可能比結構的最大長度小。
原帖地址:http://www.cnblogs.com/ChangeIt/archive/2011/12/26/2302294.html
相關文章
- 好程式設計師Java學習路線分享如何處理中文引數程式設計師Java
- 深度學習煉丹-超引數設定和網路訓練深度學習
- Unix哲學(Unix程式設計藝術)程式設計
- Unix程式設計藝術,Unix哲學程式設計
- UNIX網路程式設計學習(17)--檢查套接字選項是否受支援並獲取預設值程式設計
- UNIX網路程式設計學習(16)--使用poll的TCP伺服器程式程式設計TCP伺服器
- 用4種不同的程式設計模式驗證繫結引數程式設計設計模式
- Swift學習筆記(三十一)——引數的預設值Swift筆記
- UNIX網路程式設計學習(9)--getsockname和getpeername的用法及例項程式設計
- 《Unix 網路程式設計》15:Unix 域協議程式設計協議
- UNIX網路程式設計學習(3)--簡單時間獲取伺服器程式程式設計伺服器
- UNIX網路程式設計學習(18)--UDP回射(伺服器+客戶端)程式程式設計UDP伺服器客戶端
- 成為更好的程式設計師必須學習的 4 種程式設計結構程式設計師
- UNIX網路程式設計學習(15)--使用單程式和select的TCP伺服器程式程式設計TCP伺服器
- UNIX網路程式設計學習(1)--開啟ubuntu daytime服務程式設計Ubuntu
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 物聯網學習教程—函式引數和函式的值函式
- 網路安全學習有些啥市場價值?網路安全學習
- UNIX網路程式設計學習(12)--對兩個數求和的str_echo函式-以及sscanf的用法程式設計函式
- UNIX 網路程式設計學習(7)--readn,writen,readline的實現程式設計
- JAVA學習線路:day14-網路程式設計Java程式設計
- 好程式設計師大資料學習路線Hbase總結程式設計師大資料
- 學習程式設計常用網站分享程式設計網站
- 網路程式設計學習筆記程式設計筆記
- Unix高階程式設計學習筆記--系統呼叫簡介程式設計筆記
- 數學與程式設計:“概率論”總結程式設計
- 微課|Python程式設計開發寶典(5.2.2):預設值引數Python程式設計
- 學習程式設計之前一定要學習數學嗎? - CACM程式設計ACM
- JavaScript函數語言程式設計學習JavaScript函數程式設計
- 結構化程式設計--學習筆記程式設計筆記
- 【Javascript】DOM程式設計學習總結篇JavaScript程式設計
- Java 併發程式設計學習總結Java程式設計
- .Net程式設計師安卓學習之路2:訪問網路API程式設計師安卓API
- C#程式設計學習(04):基本操作學習總結C#程式設計
- 深入學習js之——引數按值傳遞#9JS
- UNIX網路程式設計(6)--套接字地址結構、通用套接字地址結構程式設計
- C#格式化數值結果表C#
- 20145227 《Java程式設計》第4周學習總結Java程式設計