#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h> #include <unistd.h> int main()
{
    int ret;
    int sockfd;
    int sockbuflen = 0;
    int len = sizeof(sockbuflen);     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        fprintf(stderr, "sockfd get error\n");
        return -1;
    }
    
    ret = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (void *)&sockbuflen, &len);
    if (ret < 0) {
        fprintf(stderr, "getsockopt error\n");
        return -1;
    }
    printf("%d\n", sockbuflen);
    
    sockbuflen = 4480;
    setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (void *)&sockbuflen, len);
    
    ret = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (void *)&sockbuflen, &len);
    if (ret < 0) {
        fprintf(stderr, "getsockopt error\n");
        return -1;
    }
    printf("%d\n", sockbuflen);     return 0;
}

函数用法,参数选项在《UNIX网络编程_卷1》第七章,套接字选项中有详细叙述,需要的可以查阅。

此处需要注意的是:

1.getsockopt() 参数中的len必须初始化成 sizeof(int) ,此处容易跟recvfrom中的addrlen混淆。

2.设置sockbuflen之后获取出来的数值是设置的2倍/*暂时没有深入探究原因*/

第一个原因是因为,看code

int sock_getsockopt(struct socket *sock, int level, int optname,
char *optval, int *optlen)
{
struct sock *sk = sock->sk; union
{
int val;
struct linger ling;
struct timeval tm;
} v; int lv=sizeof(int),len; if(get_user(len,optlen))
return -EFAULT; switch(optname)
{
     /*...*/case SO_SNDBUF:
v.val=sk->sndbuf;
break; case SO_RCVBUF:
v.val =sk->rcvbuf;
break;
     /*...*/default:
return(-ENOPROTOOPT);
}
len=min(len,lv);
if(copy_to_user(optval,&v,len))
return -EFAULT;
lenout:
if(put_user(len, optlen))
return -EFAULT;
return ;
}

当len为0时候,于copy_to_user中的len为0,所以optval,也就是getsockopt获取的数值实际上是没变的。

修改socket缓冲区大小的更多相关文章

  1. 修改帧大小和socket缓冲区大小(转)

    修改帧大小和socket缓冲区大小 MTU (最大传输单元)的缺省值为1500. 通过下面命令将其改为9000(jumbo frame) % ifconfig eth0 mtu 9000 socket ...

  2. Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小

    Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...

  3. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

  4. socket tcp缓冲区大小的默认值、最大值

    Author:阿冬哥 Created:2013-4-17 Blog:http://blog.csdn.net/c359719435/ Copyright 2013 阿冬哥 http://blog.cs ...

  5. 【Linux】tcp缓冲区大小的默认值、最大值

    Author:阿冬哥 Created:2013-4-17 Blog:http://blog.csdn.net/c359719435/ Copyright 2013 阿冬哥 http://blog.cs ...

  6. 修改Arduino串口缓冲区大小(转)

    本帖节选自<Arduino程序设计基础>第二版5.1.6串口缓冲区       在之前的示例程序中,我们都是采用人工输入测试数据的方式检验程序效果,Arduino每接收到一次数据,就会将数 ...

  7. Python网络编程——修改套接字发送和接收的缓冲区大小

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  8. Socket缓冲区探讨,是否有拆包的方式?

    Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...

  9. udp之关于linux udp收发包缓冲区大小

    1.修订单个socket的缓冲区大小:通过setsockopt使用SO_RCVBUF来设置接收缓冲区,该参数在设置的时候不会与rmem_max进行对比校验,但是如果设置的大小超过rmem_max的话, ...

随机推荐

  1. CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介

    自我学习:一.线程安全日期格式化操作的几种方式:1.每次new一个新对象:public static Date parse(String date) throws ParseException { r ...

  2. js选择器 querySelector

    <form method="post" action="" id="myform"> <input type=" ...

  3. zabbix自动发现与监控内存和CPU使用率最高的进程,监测路由器

    https://cloud.tencent.com/info/488cfc410f29d110c03bcf0faaac55b2.html         (未测试) https://www.cnblo ...

  4. 25. LiveBos调用class实例

    var v= ABS_LOADBEAN('com.apex.mmsqljdbc.TestJDBC');var date=ABS_SQLVALUE("select to_char(?,'yyy ...

  5. SqlServer——触发器

    一:触发器基本知识  1.首先必须明确以下几点: 触发器是一种特殊的存储过程,但没有接口(输入输出参数),在用户执行Inserted.Update.Deleted 等操作时被自动触发: 当触发的SQL ...

  6. leetcode122

    public class Solution { public int MaxProfit(int[] prices) { var list = new List<KeyValuePair< ...

  7. License 校验

    1:了解keytool 的一些命令  http://www.micmiu.com/lang/java/keytool-start-guide/ 本人在github找的一个demo:https://gi ...

  8. as3 有趣现象 关于声明与变量

    当使用了一个变量,并且前后期都没有在有效域内对此声明,不管有没有赋值,都会报错. 但先使用了一个变量,后期在有效域内对此声明,那么此变量不报错,但在声明之前没有赋值,那么赋值默认值:如果使用变量时,赋 ...

  9. WDA-BOPF业务对象处理框架

    SAP中的BOPF(Business Object Processing Framework) 正文 希望简化你的业务应用开发过程?业务对象处理框架(Business Object Processin ...

  10. H5新标签

    1. H5新标签 语义标签: <article>定义文章</article><aside>定义文章侧边栏</aside> <figure>定 ...