关于setsockopt和getsockopt函数
来源:互联网 发布:淘宝十大恶心模特 编辑:程序博客网 时间:2024/05/21 20:30
用法:
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int sock, int level,int optname, void *optval, socklen_t *optlen);
int setsockopt(int sock, int level,int optname, const void *optval, socklen_t optlen);
参数:
sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。
optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。
optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字
参数详细说明:
level指定控制套接字的层次.可以取三种值:
1)SOL_SOCKET:通用套接字选项.
2)IPPROTO_IP:IP选项.
3)IPPROTO_TCP:TCP选项.
optname指定控制的方式(选项的名称),我们下面详细解释
optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换
选项名称 说明 数据类型
========================================================================
SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST 允许发送广播数据 int
SO_DEBUG 允许调试 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 获得套接字错误 int
SO_KEEPALIVE 保持连接 int
SO_LINGER 延迟关闭连接 struct linger
SO_OOBINLINE 带外数据放入正常数据流 int
SO_RCVBUF 接收缓冲区大小 int
SO_SNDBUF 发送缓冲区大小 int
SO_RCVLOWAT 接收缓冲区下限 int
SO_SNDLOWAT 发送缓冲区下限 int
SO_RCVTIMEO 接收超时 struct timeval
SO_SNDTIMEO 发送超时 struct timeval
SO_REUSERADDR 允许重用本地地址和端口 int
SO_TYPE 获得套接字类型 int
SO_BSDCOMPAT 与BSD系统兼容 int
========================================================================
IPPROTO_IP
------------------------------------------------------------------------
IP_HDRINCL 在数据包中包含IP首部 int
IP_OPTINOS IP首部选项 int
IP_TOS 服务类型
IP_TTL 生存时间 int
========================================================================
IPPRO_TCP
------------------------------------------------------------------------
TCP_MAXSEG TCP最大数据段的大小 int
TCP_NODELAY 不使用Nagle算法 int
========================================================================
SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。
// 接收缓冲区
intnRecvBuf=32*1024;
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(constchar*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(constchar*)&nSendBuf,sizeof(int));
注意:
结合原理说明:
参考百度百科
- 关于setsockopt和getsockopt函数
- setsockopt函数和getsockopt函数
- getsockopt()函数和setsockopt()函数
- getsockopt()和setsockopt()函数详解
- setsockopt和getsockopt函数解析
- getsockopt()和setsockopt()函数详解
- getsockopt()和setsockopt()函数详解
- socket之setsockopt()和getsockopt()函数
- socket中getsockopt和setsockopt函数详解
- getsockopt()/setsockopt()函数
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明
- getsockopt/setsockopt 函数说明 .
- getsockopt/setsockopt 函数说明
- matlab中的contour画曲面的等高线图 和pie 饼状图 surf画三维图
- appwidgetProviedr
- Msxml2.XMLHTTP和Microsoft.XMLHTTP有什么区别?
- Java使用SWFTools转换PDF为SWF
- PLSQL常用设置
- 关于setsockopt和getsockopt函数
- IBM分析大数据在现实世界中的应用
- C++ 条件运算符 ? :求公共类型
- struts.xml文件中 result标签的 type 属性为redirectAction时URL参数与值的获得
- RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
- 第七周项目2:成员函数、友元函数和一般函数求两点间的距离
- 硬币问题之记忆化搜索-动态规划 By ACReaper
- 【IOS】蓝牙通信示例
- SQL Server 拆分字符串方法详解