Created
May 11, 2016 07:59
-
-
Save limboinf/d7805b1ba34de8f88cca6cb7e8d727da to your computer and use it in GitHub Desktop.
C 查看和设置接收和发送缓冲区大小
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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