UNPv1第七章 套介面選項

2021-07-11 10:47:05 字數 1440 閱讀 9872

這兩個函式僅用於套接字:

#include 

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

int setsockopt(int sockfd, int level, int optname, const

void *optval socklen_t optlen);

//均返回:若成功為0,出錯為-1

其中sockfd必須指向乙個開啟套接字描述符

level(級別)指定系統中解釋選項的**或為通用套接字**,或為某個特定於協議的**

optval是乙個指向某個變數(optval)的指標,setsockopt從*optval中取得選項待設定的新值,getsockopt則把已獲取的選項當前值存放到*optval,*optval的大小由最後乙個引數optlen指定,它對於setsockopt是乙個值引數,對於getsockopt是乙個值-結果引數*

呼叫getsockopt函式時,*optval是乙個整數,*optval中返回的值為0,表示相應選項被禁止,不為0表示相應項被啟用,類似地,setsockopt函式需要乙個不為0的*optval值裡啟用選項,乙個為0的*optval值來禁止選項。

函式fcntl提供了下列關於網路程式設計特性:

(1)非阻塞i/o。通過使用f_setfl命令設定o_nonblock檔案狀態標誌,我們可以把乙個套接字設定為非阻塞型

(2)訊號驅動i/o。通過使用f_setfl命令設定o_async檔案狀態標誌,我們可以把乙個套接字設定成一旦其狀態發生變化,核心就產生乙個sigio訊號

#include 

int fcntl(int fd, int cmd, ... /* int arg */ );

//返回:若成功取決於cmd,出錯-1

每種描述符(包括套接字描述符)都有一組由f_getfl命令獲取或f_setfl命令設定的檔案標誌。其中影響套接字描述符的兩個標誌是:

o_nonblock——–非阻塞i/o

o_async————-訊號驅動式i/o

使用fcntl開啟(關閉)非阻塞i/o的典型**

int     flags;

/* set a socket as nonblocking */

if ( (flags = fcntl (fd, f_getfl, 0)) < 0)

err_sys("f_getfl error");

flags |= o_nonblock;//開啟

flags |= ~o_nonblock;//關閉

if (fcntl(fd, f_setfl, flags) < 0)

err_sys("f_setfl error");

UNPv1第十七章 路由套介面

在路由器介面中支援三種型別的操作 1 程序能通過寫路由套介面向核心發訊息。2 程序能在路由套介面上從核心讀訊息,這是核心通知程序已收到乙個icmp重定向訊息並進行了處理的方式。3 程序可以用sysctl函式得到路由表或列出所有已配置的介面。在路由套介面上返回的一些訊息中包含資料鏈路套介面位址結構,他...

第七章 介面

為什麼使用介面?什麼情況下使用介面?來看看下面這個例子 目前有許多檔案的壓縮格式,包括 zip rar cab tar等等。假如每種壓縮格式都建立乙個類,那麼每個壓縮實現都會有不同的方法簽名,無法提供標準的呼叫規範。雖然方法可以在基類宣告,並在子類實現,但是這樣會用掉唯一的基類機會 c 只支援單繼承...

UNPv1第二十五章 原始套介面

原始套介面提供以下三種tcp及udp套介面一般不提供的功能。1.使用原始套介面可以讀寫icmpv4,igmpv4,icmpv6分組。例如 ping程式,就使用原始套介面傳送icmp回射請求,並接受icmp回射應答。2.使用原始套介面可以讀寫特殊的ipv4資料報,核心不處理這些資料報的ipv4協議字段...