setsocket getsocket 函式詳解

2022-02-18 09:09:01 字數 3089 閱讀 3558

#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...