linux套接字选项—getsockopt和setsockopt
来源:互联网 发布:13网络用语 编辑:程序博客网 时间:2024/06/03 14:24
1.函数原型:
int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)
2.参数说明: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
=============================================================
3.返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字
SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。
// 接收缓冲区
int nRecvBuf=32*1024; //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
4.数据结构说明:
在上面有两个数据结构需要说明一下:
1)结构:linger,它的声明如下:
struct linger{
int l_onoff; //状态
int l_linger; //等待时间
};
2)结构:timeval,它的声明如下:
struct timeval{
time_t tv_sec; //秒
suseconds_t tv_usec; //微秒:百万分之一秒
};
4.注意:
当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。
- linux套接字选项—getsockopt和setsockopt
- 套接字选项(getsockopt 和 setsockopt )
- 套接字选项列表(getsockopt和setsockopt )
- 套接字选项getsockopt() 和 setsockopt()
- 套接字选项之getsockopt和setsockopt
- 获取和设置套接字选项——getsockopt/setsockopt
- 套接字选项(getsockopt()与setsockopt())
- 套接字API(八)getsockopt和setsockopt
- socket默认的套接字选项,setsockopt/getsockopt
- socket编程选项——setsockopt和getsockopt
- 套接字选项setsockopt()
- Linux下getsockopt和setsockopt小结
- linux 下getsockopt()和setsockopt()分析
- Linux Socket学习之:套接口选项 getsockopt 、setsockopt
- Open C 套接字:getsockopt, setsockopt 用法小结
- socket 中sockopt选项。主要是setsockopt和getsockopt使用
- getsockopt 和 setsockopt
- getsockopt 和 setsockopt
- Linux驱动程序学习笔记(5)——新版本的初始化
- Hive安装与配置——深入浅出学Hive
- 重新认识执行力
- JDBC数据库连接池总结
- 创业的本质是有效服务
- linux套接字选项—getsockopt和setsockopt
- 国际化作业
- On the Superfluousness of std::move - Scott Meyers
- xp系统创建新用户用Administrator账户消失解决方法
- 从spin_lock到spin_lock_irqsave
- oracle expdp impdp 用法
- 数理逻辑:公理化算术(1)项,扩充的谓词演算
- 内存池技术学习笔记
- 用javascript跳转url传中文乱码的解决方法