Linux 之 網路程式設計之套接字選項

2021-07-24 07:26:29 字數 3030 閱讀 6508

獲取和設定套接字選項

so_keepalive選項

so_linger選項

so_rcvbuf和so_sndbuf選項

so_rcvlowat和so_sndlowat選項

so_rcvtimeo和so_sndtimeo選項

so_reuseaddr選項

getsockopt()函式和setsockopt()函式原型:

#include int getsockopt(int s,int level,int optname,void* optval.socklen_t* optlen);

int setsockopt(int s,int level,int optname,void* optval.socklen_t optlen);

按照引數選項界別level值的不同,套接字選項可以分為3大類:

通用套接選項:level的值為sol_socket

ip選項:level的值為ipproto_ip

tcp選項:level的值為ipproto_tcp

so_keepalive保持連線選項,2小時沒有資料互動,傳送探測報文,有三種回應:

回應乙個ack報文

回應乙個rst報文

沒有任何回應

so_keepalive使用方法:

int optval =1;

setsockopt(sockfd,sol_socket,so_keepalive,&optval,sizeof(optval));

so_linger緩衝區處理方式選項,它的操作通過乙個結構體進行:

struct linger;

so_linger選項使用方法有三種:

l_onoff等於0,此時so_linger選項不起作用

l_onoff不為0,l_linger為0

l_onoff不為0,l_linger不為0

so_linger使用方法:

optval.l_onoff =1;

optval.l_linger =60;setsockopt(sockfd,sol_socket,so_linger,&optval,sizeof(optval));

so_rcvbuf和so_sndbuf緩衝區大小選項:

設定tcp/udp連線的接收/傳送緩衝區的含義

在connect()函式呼叫之前設定

so_rcvtimeo表示接收超時,so_sndtimeo表示傳送超時,設定是通過乙個結構體來實現:

struct timeval;

so_rcvlowat和so_sndlowat選項表示接收緩衝區和傳送緩衝區的低水位標記。
int reuse =1;

setsockopt(sockfd,sol_socket,so_reuseaddr,&reuse,sizeof(reuse));

tcp_keepalive選項

tcp_nodelay和tcp_cork選項

ip_tos選項

ip_ttl選項

tcp_keepalive用來獲取或設定存活探測的時間間隔:

int alivetime = 60;

int fd = socket(af_inet,sock_stream,0);

setsockopt(fd,ipproto_tcp,tcp_keepalive,&alivetime,sizoef(alivetime));

tcp_nodelay和tcp_cork針對nagle演算法,此演算法的基本原理如下:

將下分組封裝成大的分組再傳送

使用延遲確認

tcp_nodelay選項的作用:

客戶端的請求不需要和其他分組合併

tcp_cork選項的作用

需要等到傳送的資料量達到最大是,一次性傳送全部資料

服務型別選項:

iptos_lowdelay:表示最小延遲

iptos_reliability:表示最大可靠性

iptos_throughput:表示最大吞吐量

iptos_lowcost:表示最小成本

ioctl()函式的命令選項

ioctl()函式的io請求

ioctl()函式的檔案請求

ioctl()函式的網路介面請求

ioctl()函式對arp快取記憶體操作

ioctl()函式和協議棧互動,主要的互動型別由:

io檔案

網路介面

路由arp

套接字io操作的命令請求有6個,第三個引數為整形指標:

siocatmark:檢視tcp連線是否有帶外資料

siocspgrp和fiosetown:處理套接字的sigio和sigurg訊號

siocgpgrp和fiogetown:設定接收sigio訊號的程序id

siocgstamp:獲取最後乙個資料報達到的事件

檔案請求的命令有3個:

fionbio:用於設定或清除套接字的非阻塞標誌

fioasync:設定或者清除套接字的非同步訊號

fionread:獲得當前套接字接受緩衝區的位元組數

獲得網路介面的不同引數的不同命令選項:

siocgifaddr和siocsifaddr:獲取和設定本地ip位址

siocgifmtu和siocsifmtu:獲取和設定mtu

siocgifhwaddr和siocsifhwaddr:獲取和設定硬體位址

ioctl()函式獲取arp快取記憶體,有三個命令字:

siocdarp:刪除快取記憶體中的乙個記錄

siocsarp:設定或者修改乙個記錄

siocgarp:獲得乙個記錄

(未完待續……持續更新……)

LINUX網路程式設計之套接字

套接字可以讓linux在網路上通訊,用起來就像管道一樣,當然管道都是單向的,套接字既能寫也能收!以下是多客戶伺服器 include include include include include include include include define port 6000 define size...

套接字程式設計之localsocket

unix domain socket ipc 使用unix domain socket的過程和網路socket十分相似,也要先呼叫socket 建立乙個socket檔案描述符,address family指定為af unix,type可以選擇sock dgram或sock stream,protoc...

Linux網路程式設計 套接字結構

1,結構體 struct sockaddr,struct sockaddr in,struct in addr 通用套接字資料結構 struct sockaddr實際使用的套接字資料結構,二者可以進行型別轉換 struct sockaddr in struct in addr 2,主機位元組序和網路...