套接字選項

2021-08-20 03:52:26 字數 1722 閱讀 3467

有很多方法獲取和設定影響套接字的選項:

-getsockopt和setsockopt函式

-fcntl函式

-ioctl函式

getsockopt和setsockopt函式

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);

level指定系統中解釋選項的**或為通用套接字**,或為某個特定與協議的**(ipv4,ipv6,tcp)

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

套接字選項彙總:

套接字的選項粗分為兩類:一是啟動或禁止某個特性的二元選項(稱為標誌選項);二是取得並返回我們可以設定或檢查特定值的選項(稱為值選項)。

(每個選項的作用不再詳述)

fcntl函式(file control檔案控制)

fcntl函式可執行各種描述符控制操作。

下圖彙總了由fcntl,ioctl和路由器套接字執行的不同操作:

前6個操作可由任何程序應用於套接字,接著兩個操作比較少見。後兩個操作由ifconfig和route之類管理程式執行。

#includeint fcntl(int fd, int cmd, ...);        //若成功則取決於cmd
每種描述符都有一組f_getfl命令獲取或f_setfl命令設定的檔案標誌,其中影響套接字描述符的兩個標誌是:

o_nonblock——非阻塞式i/o

o_async——訊號驅動式i/o

設定某個檔案狀態標誌的唯一正確的方法是:先取得當前標誌,與新標誌邏輯或後再設定標誌。

使用fcntl開啟非阻塞式i/o的典型**:

int flags;

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

err_sys("f_getfl error!");

flags |= o_nonblock; //儲存原本的標誌,並開啟非阻塞

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

err_sys("f_setfl error!");

關閉:

flags &= ~o_nonblock;

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

.................

套接字選項

之前讀過unix網路程式設計,現在在看nginx原始碼,很多套接字選項不記得了,因此每遇到乙個套接字選項就在此文章中進行補充。1.獲取和設定套接字選項的方法 getsockopt,setsockopt函式 fcntl函式 ioctl函式 2.4種函式簡介 i.getsockopt,setsockop...

通用套接字選項和TCP套接字選項

1.套接字選項函式原型 include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen int setsockopt int sockfd,int level,int optname,const...

通用套接字選項和TCP套接字選項

1.套接字選項函式原型 include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen int setsockopt int sockfd,int level,int optname,const...