setsocketopt函数使用的教训 linux c 语言
来源:互联网 发布:apache kafka源码剖析 编辑:程序博客网 时间:2024/06/05 17:39
几天前写了个ftp作业 并不是很满意 不过学到了很多东西
为了做服务器的流量控制,尝试控制tcp传输的报文长度
本人比较笨,加之是菜鸟,manpage什么的也不懂得去看
绕了很多弯路 在此先盖个楼 考试复习无聊之余慢慢填满
在此总结下经验教训
1.使用这些函数首先要看api
setsocketopt:传送门
http://blog.csdn.net/chary8088/article/details/2486377
getsocketopt:传送门
http://blog.csdn.net/xioahw/article/details/4056514
2.不同等级的套接字选项对于套接字是否绑定有要求部分套接字必须放到blind之前 这个在manpage里边有规定
3.去manpage或者其他地方查询该项设置的省缺值和限定范围
http://www.linuxmanpages.com/
http://www.kernel.org/doc/man-pages/online/pages/man7/tcp.7.html
比如就曾经出现过如此尴尬的事情:
在manpage中规定的sndbuf的size最小为1024
使用测试代码时,本人将int size=1024负值
结论:setsocketopt参数返回0,失败
getsocketopt参数对于socket的sndbuf返回值为1024
wireshark抓包结果为系统缺省设置
结论:尽量设置在系统省缺值之外
疑问:待测试项,由于setsocketopt函数传入1024为sndbuf中理论为2048,当我设置为2048时,wireshark抓包tcp最大window结果为3k+的一个值。理论值为4096
4.关于mss与sndbuf
在测试过程中本人将mss设置为512(对于我的程序这是一个错误的未考虑tcp header 12个char 的数值)。 做内部环路测试与联机测试时,wireshark抓包结果为服务器端mss设置为512,对端为缺省设置。sndbuf理论上控制了tcp最大窗口大小,但是考虑实际情况,推测为内核分配一个指定长度的空间用于tcp接收详见5,而不是通常意义上的直接控制tcp的最大窗口大小。
疑问:根据tcp ip协议 建立连接三次握手后,是不是应该统一mss的大小和缓冲区的大小?为何实际上对端mss和window大小不变?
5关于缓冲区与mss以及tcp 最大窗口的关系
待检测
推测如下,最大窗口为mss的倍数,且小于等于内核设置的缓冲区大小。取缓冲区大小最接近的mss的整倍数。
ps:测试代码一瞥
printf("------success?:%d\n",setsockopt(socket_fd,SOL_SOCKET,SO_RCVBUF,&size,sizeof size));
printf("------success?:%d\n",setsockopt(socket_fd,SOL_SOCKET,SO_SNDBUF,&size,sizeof size));printf("------success?:%d\n",setsockopt(socket_fd,IPPROTO_TCP,TCP_MAXSEG,&size2,sizeof size2));
printf("------success?:%d\n",setsockopt(socket_fd,IPPROTO_TCP,TCP_NODELAY,&one,sizeof one));
2012 6 6 1:24第一次填写
2012 6 7 20:48 完成第一部分
- setsocketopt函数使用的教训 linux c 语言
- Linux下getsocketopt 与 setsocketopt函数说明
- 一个C语言的惨痛教训
- C函数不加括号的教训
- 最差劲最凌乱的一个小程序,给自己一个教训-Linux下C语言
- C语言中系统函数在linux下的使用
- linux中c语言精确计时函数的使用
- 关于setsocketopt函数
- 关于setsocketopt函数
- 关于setsocketopt函数 .
- 关于setsocketopt函数
- setsocketopt。。。。
- setsocketopt
- linux C语言 select函数的用法
- linux 的C语言 fork()函数
- linux c语言字符串函数的实现
- Linux下的C语言函数perror
- Linux C编程(3) 使用C语言函数读写文件
- 读取文件
- openGL函数解释
- jquery ajax实现下拉列表联动
- mpls vpn 单区域
- Android:Layout_weight的深刻理解,个人首发,欢迎转载和顶贴!
- setsocketopt函数使用的教训 linux c 语言
- Ajax学习笔记(1)----小试Ajax
- Objective-C对象的申请空间与初始化
- php oop 总结
- rpm安装软件时提示warning:******** Header V3 DSA signature:NOKEY,key,ID
- SQL查询语句精华使用简要
- 汇编 实验
- wget 详细用法 下载整个站点
- 新浪微博发布一条微博和图片的接口调用实例