日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

getsockopt和setsockopt函数

發(fā)布時間:2024/1/23 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getsockopt和setsockopt函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? 在Unix網(wǎng)絡(luò)編程中通常用到getsockopt和setsockopt兩個函數(shù)來獲取和設(shè)置套接口的選項。

? ? getsockopt()函數(shù)用于獲取任意類型、任意狀態(tài)套接口的選項當(dāng)前值,并把結(jié)果存入optval。

#include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); /**sockfd: 一個標(biāo)識套接口的描述字*level:選項定義的層次。例如,支持的層次有SOL_SOCKET、IPPROTO_TCP等。*optname:需獲取的套接口選項。*optval:指針,指向存放所獲得選項值的緩沖區(qū)。*optlen:指針,指向optval緩沖區(qū)的長度值。 */

? ? setsockopt()函數(shù)用于任意類型、任意狀態(tài)套接口的設(shè)置選項值。盡管在不同協(xié)議層上存在選項,但本函數(shù)僅定義了最高的"套接口"層次上的選項。

#include <sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); /* * sockfd: 標(biāo)識一個套接口的描述字。 * level: 選項定義的層次:支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6等。 * optname: 需設(shè)置的選項。 * optval: 指針,指向存放選項值的緩沖區(qū)。 * optlen: optval緩沖區(qū)長度。 */

? ? 以上兩個函數(shù)僅用于套接口,sockfd必須指向一個打開的套接口,level指定系統(tǒng)中解釋選項的代碼,普通套接口代碼或特定于協(xié)議的代碼(例如: IPv4、IPv6或TCP)。

? ? optval是一個指向變量的指針,通過它,或由setsockopt取得選項的新值,或由getsockopt存儲選項的當(dāng)前值。此變量的大小由最后一個參數(shù)指定,對于setsockopt,它是一個值,對getsockopt來說,它是一個出參。

? ? 下表總結(jié)了由getsockopt獲取或由setsockopt設(shè)置的一些選項,"數(shù)據(jù)類型"列給出了指針optval必須指向的每個選項的數(shù)據(jù)類型。其中,用花括號的標(biāo)記來表示一個結(jié)構(gòu),如linger{}表示結(jié)構(gòu)linger。

? ? level級別:SOL_SOCKET

optname(選項名)選項值數(shù)據(jù)類型訪問說明
SO_ACCEPTCONNboolget如為TRUE(真),表明套接字處于監(jiān)聽模式
SO_BROADCASTboolget/set如TRUE,表明套接字已配置成對廣播消息進(jìn)行發(fā)送
SO_CONNECT_TIMEintget返回套接字建立連接的時間,以秒為單位,如尚未連接,返回0xffffffff
SO_DEBUGboolget/set如果TRUE,就允許調(diào)試輸出(W32不支持)
SO_DONTLINGERboolget/set如果是TRUE,則禁用SO_LINGER
SO_LINGERstruct lingerget/set設(shè)置或獲取當(dāng)前的拖延值
SO_DONTROUTEboolget/set如果TRUE,便直接向網(wǎng)絡(luò)接口發(fā)送消息,無需查詢路由表
SO_ERRORboolget返回錯誤狀態(tài)
SO_EXCLUSIVEADDRUSEboolget/set如果TRUE,套接字綁定那個本地端口就不能重新被另一個進(jìn)程使用
SO_KEEPALIVEboolget/set如果TRUE,套接字就會進(jìn)行配置,在會話過程中發(fā)送“保持活動”消息
SO_MAX_MSG_SIZEunsigned intget對一個面向消息的套接字來說,一條消息的最大長度
SO_OOBINLINEboolget/set如果是TRUE,帶外數(shù)據(jù)就會在普通數(shù)據(jù)流中返回(W32不支持)
SO_PROTOCOL_INFOWSAPROTOCOL_INFOget套接字綁定的那種協(xié)議的特征
SO_RCVBUFintget/set面向接收操作,為每個套接字分別獲取或設(shè)置緩沖區(qū)長度
SO_REUSEADDRboolget/set如果是TRUE,套接字就可與一個正由其他套接字使用的地址綁定到一起,或與處在TIME_WAIT狀態(tài)的地址綁定到一起
SO_SNDBUFboolget/set返回指定套接字的類型(如SOCK_DGRAM和SOCK_STREAM等等)
SO_SNDTIMEOintget/set獲取或設(shè)置套接字上的數(shù)據(jù)發(fā)送超時事件(以毫秒為單位)
SO_RCVTIMEOintget/set獲取或設(shè)置與套接字上數(shù)據(jù)接收對應(yīng)的超時時間值(以毫秒為單位)
SO_RCVTIMEOintget/set獲取或設(shè)置與套接字上數(shù)據(jù)接收對應(yīng)的超時時間值(以毫秒為單位)
SO_UPDATE_ACCEPT_CONTEXTSOCKETget/set更新SOCKET狀態(tài)

level級別:IPPROTO_IP

optname(選項名)選項值數(shù)據(jù)類型訪問說明
IP_OPTIONSchar[]get/set設(shè)置或獲取IP頭內(nèi)的IP選項
IP_HDRINCLboolget/set如果是TRUE,IP頭就會隨即將發(fā)送的數(shù)據(jù)一起提交,并從讀取的數(shù)據(jù)中返回
IP_TOSintget/setIP服務(wù)類型
IP_TTLintget/setIP協(xié)議的"存在時間"(TTL)
IP_MULTICAST_IFunsigned longget/set獲取或設(shè)置打算從它上面發(fā)出多播數(shù)據(jù)的本地接口
IP_MULTICAST_TTLintget/set為套接字獲取或設(shè)置多播數(shù)據(jù)包的存在時間
IP_MULTICAST_LOOPboolget/set如果TRUE,發(fā)至多播地址的數(shù)據(jù)將原封不動地"反射"或"反彈"回套接字的進(jìn)入緩沖區(qū)
IP_ADD_MEMBERSHIPstruct ip_mreqset在指定的IP組內(nèi)為套接字賦予成員資格
IP_DROP_MEMBERSHIPstruct ip_mreqset將套接字從指定的IP組內(nèi)刪去(撤銷成員資格)
IP_DONTFRAGMENTboolget/set如果是TRUE,就不對IP數(shù)據(jù)進(jìn)行分段

level級別:IPPROTO_TCP

optname(選項名)選項值數(shù)據(jù)類型訪問說明
TCP_NODELAYboolget/set若為TRUE,就會在套接字上禁用Nagle算法(只適用于流式套接字)

?

總結(jié)

以上是生活随笔為你收集整理的getsockopt和setsockopt函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。