修改socket缓冲区大小
#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缓冲区大小的更多相关文章
- 修改帧大小和socket缓冲区大小(转)
修改帧大小和socket缓冲区大小 MTU (最大传输单元)的缺省值为1500. 通过下面命令将其改为9000(jumbo frame) % ifconfig eth0 mtu 9000 socket ...
- Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小
Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...
- VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时
之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...
- socket tcp缓冲区大小的默认值、最大值
Author:阿冬哥 Created:2013-4-17 Blog:http://blog.csdn.net/c359719435/ Copyright 2013 阿冬哥 http://blog.cs ...
- 【Linux】tcp缓冲区大小的默认值、最大值
Author:阿冬哥 Created:2013-4-17 Blog:http://blog.csdn.net/c359719435/ Copyright 2013 阿冬哥 http://blog.cs ...
- 修改Arduino串口缓冲区大小(转)
本帖节选自<Arduino程序设计基础>第二版5.1.6串口缓冲区 在之前的示例程序中,我们都是采用人工输入测试数据的方式检验程序效果,Arduino每接收到一次数据,就会将数 ...
- Python网络编程——修改套接字发送和接收的缓冲区大小
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- Socket缓冲区探讨,是否有拆包的方式?
Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...
- udp之关于linux udp收发包缓冲区大小
1.修订单个socket的缓冲区大小:通过setsockopt使用SO_RCVBUF来设置接收缓冲区,该参数在设置的时候不会与rmem_max进行对比校验,但是如果设置的大小超过rmem_max的话, ...
随机推荐
- springboot的一些配置
spring-boot 1.推荐使用yaml,因为默认的properties需要写更多的前缀 2.使用java -jar 的方式启动jar包的情况下,通过-spring.profiles.actiiv ...
- python正则表达式re库(自用)
经典例子: 1.由26个字母组成的字符串 ^[A-Za-z]+$ 2. 中国境内邮政编码 [1-9]\d{5} 3.IP地址 0-99:[1-9]?\d 100-199:1\d{2} 200-249: ...
- RAID0+1 RAID5 性能比较
我想大家都很清楚,存储设备性能的好坏除了与处理器(CPU).缓存等有关之外,还与RAID组中的磁盘数量有很大的关系.按RAID技术的特点,相同磁盘数量下的RAID0性能高于RAID5,RAID1的性能 ...
- setdeamon 设置 线程为守护线程, (lock线程锁, BoundedSemaphore,rlock递归锁 ) 三种锁
1.setdeamon 当主程序执行完时,子程序自动被销毁 ,内存自动被收回 例一: import threading, time def run(n): print('run %s'%n) time ...
- 五种方法实现Java的Singleton单例模式
面试的时候经常会问到Java的单例模式,这道题能很好的考察候选人对知识点的理解程度.单例模式要求在系统运行时,只存在唯一的一个实例对象. 下面我们来详细剖析一下其中的关键知识点,并介绍五种实现方法,以 ...
- xcode显示行号show gutter
要在每一个代码编辑窗口中的边线里显示行号: 使用Xcode > Preferences 菜单命令,点击 Text Editing,然后选择Editing 然后点击选择 “Line numbers ...
- JUC学习记录
先附上学习的博客地址:http://blog.csdn.net/cx8122389/article/details/70049425, 具体见该博客 Java JUC 简介 在Java 5.0 提供了 ...
- install命令
install 1.作用 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项].. ...
- StringUtil字符串工具类
package com.zjx.test03; /** * 字符串工具类 * @author * */ public class StringUtil { /** * 判断是否是空 * @param ...
- hibernate自带的注解和jpa注解的冠希
hibernate是实现了JPA规范,在我们使用hibernate框架的时候,我们引入了hibernate3或者4这个核心包.hibernate-jpa-2.0-api-1.0.0.Final.jar ...