#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 socketID = -1; /* socket描述符 */
int snd_size = 0; /* 发送缓冲区大小 */
int rcv_size = 0; /* 接收缓冲区大小 */
socklen_t optlen; /* 选项值长度 */
/*
* 建立一个TCP套接字
*/
socketID = socket(PF_INET,SOCK_STREAM,0);
if( socketID == -1)
{
printf("建立套接字错误\n");
return -1;
}
/*
* 获取原始发送缓冲区大小
*/
optlen = sizeof(snd_size);
err = getsockopt(socketID, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
if(err<0)
{
printf("获取发送缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 获取原始接收缓冲区大小
*/
optlen = sizeof(rcv_size);
err = getsockopt(socketID, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
if(err<0)
{
printf("获取接收缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 打印结果
*/
printf("发送缓冲区原始大小为: %d 字节\n",snd_size);
printf("接收缓冲区原始大小为: %d 字节\n",rcv_size);
/*
* 设置发送缓冲区大小
*/
snd_size = 10*1024; /* 发送缓冲区大小为10K */
optlen = sizeof(snd_size);
err = setsockopt(socketID, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);
if(err<0)
{
printf("设置发送缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 设置接收缓冲区大小
*/
rcv_size = 10*1024; /* 接收缓冲区大小为10K */
optlen = sizeof(rcv_size);
err = setsockopt(socketID,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);
if(err<0)
{
printf("设置接收缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 检查上述缓冲区设置的情况
* 获得修改后发送缓冲区大小
*/
optlen = sizeof(snd_size);
err = getsockopt(socketID, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
if(err<0)
{
printf("获取发送缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 获得修改后接收缓冲区大小
*/
optlen = sizeof(rcv_size);
err = getsockopt(socketID, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen);
if(err<0)
{
printf("获取接收缓冲区大小错误\n");
close(socketID);
return -1;
}
/*
* 打印结果
*/
printf("发送缓冲区大小为: %d 字节\n",snd_size);
printf("接收缓冲区大小为: %d 字节\n",rcv_size);
close(socketID);
return 0;
}
原创不易,转载请标明出处:Linux下设置socket的发送和接收缓冲区-CSDN博客