setsockopt

總覽

打開一個網(wǎng)絡(luò)socket后可以使用set/getsockopt可實現(xiàn)用戶空間與內(nèi)核的通信登失,本質(zhì)和ioctl差不多迂苛,區(qū)別在于set/getsockopt不用新建設(shè)備直颅,直接利用系統(tǒng)已有的socket類型就可以進行刮便,可用setsockopt函數(shù)向內(nèi)核寫數(shù)據(jù)褪秀,用getsockopt向內(nèi)核讀數(shù)據(jù)蓄诽。

#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
參數(shù):

sock:將要被設(shè)置或者獲取選項的套接字。socket描述符
level:選項所在的協(xié)議層媒吗。proto是sock協(xié)議仑氛,IP RAW的就用SOL_SOCKET/SOL_IP等,TCP/UDP socket的可用SOL_SOCKET/SOL_IP/SOL_TCP/SOL_UDP等闸英,即高層的socket是都可以使用低層socket的命令字的
optname:需要訪問的選項名锯岖。操作命令字,由自己定義
optval:對于getsockopt()甫何,指向返回選項值的緩沖出吹。對于setsockopt(),指向包含新選項值的緩沖辙喂。數(shù)據(jù)緩沖區(qū)起始位置指針捶牢,set操作時是將緩沖區(qū)數(shù)據(jù)寫入內(nèi)核,get的時候是將內(nèi)核中的數(shù)據(jù)讀入該緩沖區(qū)
optlen:數(shù)據(jù)長度巍耗。對于getsockopt()秋麸,作為入口參數(shù)時,選項值的最大長度芍锦。作為出口參數(shù)時竹勉,選項值的實際長度。對于setsockopt()娄琉,現(xiàn)選項的長度次乓。

返回值:

成功執(zhí)行時,返回0孽水。失敗返回-1票腰,errno被設(shè)為以下的某個值 <wbr> <wbr>
EBADF:sock不是有效的文件描述詞
EFAULT:optval指向的內(nèi)存并非有效的進程空間
EINVAL:在調(diào)用setsockopt()時,optlen無效
ENOPROTOOPT:指定的協(xié)議層不能識別選項
ENOTSOCK:sock描述的不是套接字

level指定控制套接字的層次女气⌒游浚可以取三種值:
1)SOL_SOCKET:通用套接字選項.
2)IPPROTO_IP:IP選項.
3)IPPROTO_TCP:TCP選項. 
optname指定控制的方式(選項的名稱),我們下面詳細解釋 
optval獲得或者是設(shè)置套接字選項.根據(jù)選項名稱的數(shù)據(jù)類型進行轉(zhuǎn)換 
Linux下getsockopt/setsockopt 函數(shù)說明

// 接收緩沖區(qū)
int nRecvBuf=32*1024;        //設(shè)置為32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//發(fā)送緩沖區(qū)
int nSendBuf=32*1024;//設(shè)置為32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

注意:
當設(shè)置TCP套接口接收緩沖區(qū)的大小時,函數(shù)調(diào)用順序是很重要的,因為TCP的窗口規(guī)模選項是在建立連接時用SYN與對方互換得到的缘滥。對于客戶轰胁,SO_RCVBUF選項必須在connect之前設(shè)置;對于服務(wù)器朝扼,SO_RCVBUF選項必須在listen前設(shè)置赃阀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市擎颖,隨后出現(xiàn)的幾起案子榛斯,更是在濱河造成了極大的恐慌,老刑警劉巖搂捧,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驮俗,死亡現(xiàn)場離奇詭異,居然都是意外死亡允跑,警方通過查閱死者的電腦和手機王凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮蛹,“玉大人荤崇,你說我怎么就攤上這事〕闭耄” “怎么了术荤?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長每篷。 經(jīng)常有香客問我瓣戚,道長,這世上最難降的妖魔是什么焦读? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任子库,我火速辦了婚禮,結(jié)果婚禮上矗晃,老公的妹妹穿的比我還像新娘仑嗅。我一直安慰自己,他們只是感情好张症,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布仓技。 她就那樣靜靜地躺著,像睡著了一般俗他。 火紅的嫁衣襯著肌膚如雪脖捻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天兆衅,我揣著相機與錄音地沮,去河邊找鬼嗜浮。 笑死,一個胖子當著我的面吹牛摩疑,可吹牛的內(nèi)容都是我干的危融。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼未荒,長吁一口氣:“原來是場噩夢啊……” “哼专挪!你這毒婦竟也來了及志?” 一聲冷哼從身側(cè)響起片排,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎速侈,沒想到半個月后率寡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡倚搬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年冶共,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片每界。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡捅僵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眨层,到底是詐尸還是另有隱情庙楚,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布趴樱,位于F島的核電站馒闷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叁征。R本人自食惡果不足惜纳账,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捺疼。 院中可真熱鬧疏虫,春花似錦、人聲如沸啤呼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳友。三九已至斯议,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醇锚,已是汗流浹背哼御。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工坯临, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恋昼。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓看靠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親液肌。 傳聞我的和親對象是個殘疾皇子挟炬,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容