sock getsockopt()和setsockopt()
来源:互联网 发布:知乎live破解 编辑:程序博客网 时间:2024/05/16 01:22
原型:int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
参数
sockfd:一个标识套接口的描述字。
level:选项定义的层次。支持的层次仅有SOL_SOCKET和IPPROTO_TCP。
optname:需获取的套接口选项。
optval:指向存放所获得选项值的缓冲区。
optlen:指向optval缓冲区的长度值。
返回值:
成功返回0,失败返回SOCKET_ERROR
Optname:
SOL_SOCKET SO_REUSEADDR
SOL_SOCKET SO_KKEPALIVE
SOL_SOCKET SO_LINGER
SOL_SOCKET SO_BROADCAST
SOL_SOCKET SO_OOBINLINE
SOL_SOCKET SO_SNDBUF
SOL_SOCKET SO_RCVBUF
SOL_SOCKET SO_TYPE
SOL_SOCKET SO_ERROR
SOL_TCP SO_NODELAY
例子:
#include <errno.h>
#include <error.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "prin.h"
int main()
{
int ret=-1,s=-1;
int sndbuf=0,rcvbuf=0;
socklen_t optlen;
s = socket(PF_INET,SOCK_STREAM,0);
if(s==-1)
prin_info("creat error:%s",strerror(errno));
sndbuf = 5000;
ret = setsockopt(s,SOL_SOCKET,SO_SNDBUF,&sndbuf,sizeof sndbuf);
if(ret)
prin_info("setsockopt error:%s",strerror(errno));
rcvbuf = 8192;
ret = setsockopt(s,SOL_SOCKET,SO_RCVBUF,&rcvbuf,sizeof rcvbuf);
if(ret)
prin_info("setsockopt error:%s",strerror(errno));
optlen = sizeof(sndbuf);
ret = getsockopt(s,SOL_SOCKET,SO_SNDBUF,&sndbuf,&optlen);
if(ret)
prin_info("getsockopt error:%s",strerror(errno));
prin_info("sndbuf=%d",sndbuf);
optlen = sizeof(rcvbuf);
ret = getsockopt(s,SOL_SOCKET,SO_RCVBUF,&rcvbuf,&optlen);
if(ret)
prin_info("getsockopt error:%s",strerror(errno));
prin_info("revbuf=%d",rcvbuf);
close(s);
return 0;
}
输出结果:
[main][39]sndbuf=10000
[main][46]revbuf=16384
sndbuf: 最小值是2k,最大值是224K ;默认16k(fedora下面的值,不同平台有可能不一样);在inluce/net/sock.h里面有定义,小于最小值就使用最小值,最大值也一样。其他的用设置值的2倍
#define SOCK_MIN_SNDBUF 2048
#define SOCK_MIN_RCVBUF 256
rcvbuf:最小值是256,最大值是224k;默认87380。如果设置buf=200*1024;buf=224*1024
- sock getsockopt()和setsockopt()
- getsockopt 和 setsockopt
- getsockopt 和 setsockopt
- getsockopt和setsockopt介绍
- GetSockOpt和SetSockOpt
- getsockopt 和 setsockopt讲解
- 关于setsockopt和getsockopt函数
- getsockopt()和setsockopt()函数详解
- setsockopt函数和getsockopt函数
- getsockopt()函数和setsockopt()函数
- setsockopt和getsockopt函数解析
- getsockopt()和setsockopt()函数详解
- getsockopt()和setsockopt()函数详解
- setsockopt && getsockopt
- setsockopt & getsockopt
- setsockopt,getsockopt
- getsockopt/setsockopt
- setsockopt ,getsockopt
- 简单 TabWidget
- Android实现文本的下划线,粗斜体,点阵字和修改
- ios开发之自我修炼流程图
- JSON API:用 JSON 构建 API 的标准指南中文版
- jsPerf初探
- sock getsockopt()和setsockopt()
- SqlServer已成功与服务器建立连接,但是在登录过程中发生错误。
- 全面讲解Hibernate二级缓存
- Java语言特点
- IAR--ARM常用快捷键及调试技巧
- js、css文件压缩例子-grunt
- JAVA和JVM运行原理揭秘
- 垂直中心扭曲算法
- windows系统下Python环境的搭建