通过下面这行代码获取:
getsockopt(s , SOL_SOCKET , SO_SNDBUF , &snd_size , &optlen);
通过下面这行代码设置:
setsockopt(s , SOL_SOCKET , SO_SNDBUF , &snd_size , optlen);
我想把发送缓冲区设置为4096,接收缓冲区设置为8192
整体代码:
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc , char* argv[]){
int err = -1; /*返回值*/
int s = -1; /*socket描述符*/
unsigned long snd_size = 0;/*发送缓冲区大小*/
unsigned long rcv_size = 0;/*选项值长度*/
socklen_t optlen;/*选项值长度*/
/*
*建立一个TCP套接字
*/
s = socket(PF_INET , SOCK_STREAM , 0);
if(s == -1){
printf("建立套接字错误!!!");
return -1;
}
/*
*先读取缓冲区设置的情况
*获得原始发送缓冲区大小
*/
optlen = sizeof(snd_size);
err = getsockopt(s , SOL_SOCKET , SO_SNDBUF , &snd_size , &optlen);
if(err){
printf("获取发送缓冲区大小错误!!!\n");
return -1;
}
/*
打印原始缓冲区设置情况
*/
printf("发送缓冲区原始大小为:%ld \n" , snd_size);
/*
*获取原始接收缓冲区大小
*/
optlen = sizeof(rcv_size);
err = getsockopt(s , SOL_SOCKET , SO_RCVBUF , &rcv_size , &optlen);
if(err){
printf("获取接收缓冲区大小错误!!!\n");
return -1;
}
/*
打印原始接收缓冲区设置情况
*/
printf("接收缓冲区原始大小为:%ld \n" , rcv_size);
//=====================================================================================================================
/*
*设置发送缓冲区大小
*/
snd_size = 4096; /*发送缓冲区大小为4k*/
optlen = sizeof(snd_size);
err = setsockopt(s , SOL_SOCKET , SO_SNDBUF , &snd_size , optlen);
if(err){
printf("获取发送缓冲区大小错误!!!\n");
return -1;
}
/*
*设置接收缓冲区大小
*/
rcv_size = 8192; /*发送缓冲区大小为4k*/
optlen = sizeof(rcv_size);
err = setsockopt(s , SOL_SOCKET , SO_RCVBUF , &rcv_size , optlen);
if(err){
printf("设置发送缓冲区大小错误!!!\n");
return -1;
}
if(err){
printf("设置接收缓冲区大小错误!!!\n");
return -1;
}
//==================================================================================================================
/*
检查缓冲区设置后的情况
*/
/*
*先读取缓冲区设置的情况
*获得原始发送缓冲区大小
*/
optlen = sizeof(snd_size);
err = getsockopt(s , SOL_SOCKET , SO_SNDBUF , &snd_size , &optlen);
if(err){
printf("获取发送缓冲区大小错误!!!\n");
return -1;
}
/*
打印原始缓冲区设置情况
*/
printf("修改后发送缓冲区原始大小为:%ld \n" , snd_size);
/*
*获取原始接收缓冲区大小
*/
optlen = sizeof(rcv_size);
err = getsockopt(s , SOL_SOCKET , SO_RCVBUF , &rcv_size , &optlen);
if(err){
printf("获取接收缓冲区大小错误!!!\n");
return -1;
}
/*
打印原始接收缓冲区设置情况
*/
printf("修改后接收缓冲区原始大小为:%ld \n" , rcv_size);
return 0;
}
运行结果:
但是修改后的发送缓冲区为8192,修改后的接收缓冲区为16384,它们并不是我们设置的值,这是因为linux内核设置的最小的发送缓冲区为8192,接收缓冲区为16384,当自己设置的值比这些值小的时候,系统默认最小值