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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下查看系统socket读写缓冲区

發布時間:2023/11/30 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下查看系统socket读写缓冲区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:linux下查看系統socket讀寫緩沖區大小配置:

http://blog.csdn.net/herecles/article/details/8146017

?

1. tcp 收發緩沖區默認值


[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_rmem ?


4096 ? ?87380 ? 4161536


87380 ?:tcp接收緩沖區的默認值


[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_wmem?


4096 ? ?16384 ? 4161536


16384 ?: tcp 發送緩沖區的默認值


2. tcp 或udp收發緩沖區最大值


[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_max?


131071


131071:tcp 或 udp 接收緩沖區最大可設置值的一半。


也就是說調用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); ?時rcv_size 如果超過 131071,那么


getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等于 131071 * 2 = 262142


[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max ?


131071


131071:tcp 或 udp 發送緩沖區最大可設置值得一半。


跟上面同一個道理


3. udp收發緩沖區默認值


[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_default ??


111616:udp接收緩沖區的默認值


[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_default?


111616


111616:udp發送緩沖區的默認值


4. tcp 或udp收發緩沖區最小值


tcp 或udp接收緩沖區的最小值為 256 bytes,由內核的宏決定;


tcp 或udp發送緩沖區的最小值為 2048 bytes,由內核的宏決定

?

二:socket編程設置讀寫緩沖區大小:

http://blog.csdn.net/maopig/article/details/6982457

系統提供的socket緩沖區大小為8K,你可以將之設置為64K,尤其在傳輸實時視頻時。?

socket發送數據時候先把數據發送到socket緩沖區中,之后接受函數再從緩沖區中取數據,如果發送端特別快的時候,緩沖區很快就被填滿(socket默認的是1024×8=8192字節),這時候我們應該根據情況設置緩沖區的大小,可以通過setsockopt函數實現

?#include <stdio.h>?
#include <stdlib.h>?
#include <unistd.h>?
#include <string.h>?
#include <errno.h>?
#include <sys/types.h>?
#include <sys/socket.h>?
#include <assert.h>?
?
int main(int argc,char **argv)?
{?
??? int err = -1;?? ??? ?/*?返回值?*/?
??? int s = -1;?? ??? ??? ?/*?socket描述符?*/?
??? int snd_size = 0;?? /*?發送緩沖區大小?*/?
??? int rcv_size = 0;?? ?/*?接收緩沖區大小?*/?
??? socklen_t optlen;?? ?/* 選項值長度 */?
?
??? /*?
???? * 建立一個TCP套接字?
???? */?
??? s = socket(PF_INET,SOCK_STREAM,0);?
??? if( s == -1){?
?? ??? ?printf("建立套接字錯誤\n");?
?? ??? ?return -1;?? ??
??? }?
??? ?
??? /*?
???? * 先讀取緩沖區設置的情況?
???? * 獲得原始發送緩沖區大小?
???? */?
??? optlen = sizeof(snd_size);?
??? err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);?
??? if(err<0){?
?? ??? ?printf("獲取發送緩沖區大小錯誤\n");?
??? }? ?
??? /*?
???? * 打印原始緩沖區設置情況?
???? */?
?
??? /*?
???? * 獲得原始接收緩沖區大小?
???? */?
??? optlen = sizeof(rcv_size);?
??? err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);?
??? if(err<0){?
?? ??? ?printf("獲取接收緩沖區大小錯誤\n");?
??? }?
??? ?
?? printf(" 發送緩沖區原始大小為: %d 字節\n",snd_size);?
?? printf(" 接收緩沖區原始大小為: %d 字節\n",rcv_size);?
?
??? /*?
???? *?設置發送緩沖區大小?
???? */?
??? snd_size = 10*1024;??? /* 發送緩沖區大小為8K */?
??? optlen = sizeof(snd_size);?
??? err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);?
??? if(err<0){?
?? ??? ?printf("設置發送緩沖區大小錯誤\n");?
??? }?
?
??? /*?
???? *?設置接收緩沖區大小?
???? */?
??? rcv_size = 10*1024;??? /* 接收緩沖區大小為8K */?
??? optlen = sizeof(rcv_size);?
??? err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);?
??? if(err<0){?
?? ??? ?printf("設置接收緩沖區大小錯誤\n");?
??? }?
?
??? /*?
???? * 檢查上述緩沖區設置的情況?
???? *?獲得修改后發送緩沖區大小?
???? */?
??? optlen = sizeof(snd_size);?
??? err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);?
??? if(err<0){?
?? ??? ?printf("獲取發送緩沖區大小錯誤\n");?
??? }? ?
?
??? /*?
???? *?獲得修改后接收緩沖區大小?
???? */?
??? optlen = sizeof(rcv_size);?
??? err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen);?
??? if(err<0){?
?? ??? ?printf("獲取接收緩沖區大小錯誤\n");?
??? }?
?
??? /*?
???? * 打印結果?
???? */?
??? printf(" 發送緩沖區大小為: %d 字節\n",snd_size);?
??? printf(" 接收緩沖區大小為: %d 字節\n",rcv_size);?
?
??? close(s);?
??? return 0;?

}?

運行后的結果:

發送緩沖區原始大小為: 16384 字節

?接收緩沖區原始大小為: 87380 字節
?發送緩沖區大小為: 20480 字節
?接收緩沖區大小為: 20480 字節
從結果 看出ubuntu系統默認的發送緩沖區大小:16384字節,接收緩沖區87380字節

但是有個問題我設置的接收和發送緩沖區大小為:10*1024=10240字節,但是實際用getoptsock得到卻是20480字節加了一倍。改成其他大小也是都是加倍。

這是由linux內核的算法決定的。

總結

以上是生活随笔為你收集整理的linux下查看系统socket读写缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。