Skip to content

Instantly share code, notes, and snippets.

@limboinf
Created May 11, 2016 07:59
Show Gist options
  • Save limboinf/d7805b1ba34de8f88cca6cb7e8d727da to your computer and use it in GitHub Desktop.
Save limboinf/d7805b1ba34de8f88cca6cb7e8d727da to your computer and use it in GitHub Desktop.
C 查看和设置接收和发送缓冲区大小
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.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; //选项值长度
s = socket(PF_INET, SOCK_STREAM, 0);
assert(s!=-1);
//获取原始发送缓冲区大小
optlen = sizeof(snd_size);
err = getsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, &optlen);
//获取原始接收缓冲区大小
optlen = sizeof(rcv_size);
err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
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);
//设置接收缓冲区大小
rcv_size = 10*1024;
optlen = sizeof(rcv_size);
err = setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, optlen);
/*
* 检查上述缓冲区设置的情况
* 获得修改后发送缓冲区大小
*/
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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment