#include /* see notes */
#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);
描述:
獲取或者設定與某個套接字關聯的選項。選項可能存在於多層協議中,它們總會出現在最上面的套接字層。當操作套接字選項時,選項位於的層和選項的名稱必須給出。為了操作套接字層的選項,應該 將層的值指定為sol_socket。為了操作其它層的選項,控制選項的合適協議號必須給出。例如,為了表示乙個選項由tcp協議解析,level應該設定為tcp的協議號。
引數解析:
sock:將要被設定或者獲取選項的套接字。
level:選項所在的協議層。 level指定控制套接字的層次.可以取三種值:
optname:需要訪問的選項名。(下文中會有乙個表)
optval:值,對於getsockopt(),指向返回選項值的緩衝;對於setsockopt(),指向包含新選項值的緩衝。
optlen:值長度,對於getsockopt(),作為入口引數時,選項值的最大長度;作為出口引數時,選項值的實際長度。對於setsockopt(),現選項的長度。
返回值: 成功執行時,返回0。失敗返回-1,errno被設為以下的某個值 :
選項名稱
說明資料型別
so_broadcast
允許傳送廣播資料
intso_debug
允許除錯
intso_dontroute
不查詢路由
intso_error
獲得套接字錯誤
intso_keepalive
保持連線
intso_linger
延遲關閉連線
struct linger
so_oobinline
帶外資料放入正常資料流
intso_rcvbuf
接收緩衝區大小
intso_sndbuf
傳送緩衝區大小
intso_rcvlowat
接收緩衝區下限
intso_sndlowat
傳送緩衝區下限
intso_rcvtimeo
接收超時
struct timeval
so_sndtimeo
傳送超時
struct timeval
so_reuseraddr
允許重用本地位址和埠
intso_type
獲得套接字型別
intso_bsdcompat
與bsd系統相容
int選項名稱
說明資料型別
ip_hdrincl
在資料報中包含ip首部
intip_optinos
ip首部選項
intip_tos
服務型別
intip_ttl
生存時間
int選項名稱
說明資料型別
tcp_maxseg
tcp最大資料段的大小
inttcp_nodelay
不使用nagle演算法
int改變預設緩衝區大小
so_rcvbuf和so_sndbuf每個套介面都有乙個傳送緩衝區和乙個接收緩衝區,使用這兩個套介面選項可以改變預設緩衝區大小。
// 接收緩衝區
int nrecvbuf=32*1024; //設定為32k
setsockopt(s,sol_socket,so_rcvbuf,(const char*)&nrecvbuf,sizeof(int));
//傳送緩衝區
int nsendbuf=32*1024;//設定為32k
setsockopt(s,sol_socket,so_sndbuf,(const char*)&nsendbuf,sizeof(int));
如何正常的關閉乙個套接字
我們在利用iocp(完成埠)進行程式設計的時候,經常要關閉一些不滿足條件的套接字。假如我們直接採用close方法進行關閉的話,繫結到io埠的此套接字的未傳送的資料就會丟失,這種情況是我們不願意發生的。下面介紹一種合理關閉此套接字的方法:
首先,利用setsockopt函式設定套接字的選項,我們把此套接字設定為:假如有資料未傳送,當資料傳送完後再關閉此套接字。
**如下:
struct linger linger_setvalue;
linger_setvalue.l_onoff = 1;
linger_setvalue.l_linger = 0;
setsockopt(socket, sol_socket, so_linger, (char *)&lingerstruct, sizeof(lingerstruct) );
close(socket);
當在完成埠的資料被傳送出去之後,套接字就會被關閉,這樣我們就完成了乙個套接字的關閉。
基於 udp 的 組播、廣播
基於 udp 的 組播、廣播詳解
socket 埠復用
socket 埠復用
一般在呼叫socket
以後就使用setsocket
進行設定。
舉例說明:
當設定tcp套介面接收緩衝區的大小時,函式呼叫順序是很重要的,因為tcp的視窗規模選項是在建立連線時用syn與對方互換得到的。對於客戶端,o_rcvbuf選項必須在connect
之前設定;對於伺服器,so_rcvbuf選項必須在listen
前設定。
ngx process options函式詳解
ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...
linux clock gettime函式詳解
注意 1.精確級別,納秒級別 原型long sys clock gettime clockid t which clock,struct timespec tp which clock引數解釋 clock realtime 系統實時時間,隨系統實時時間改變而改變,即從utc1970 1 1 0 0 ...
遞迴函式(詳例)
從函式棧的角度的運用 簡單的列印運用 includevoid function int n int main void function int n return 非空鍊錶的遞迴找最大值 lim findmax lim headptr 為了更好的理解遞迴的執行過程 在呼叫自生到最後時,if head...