setsockopt函数,用于任意类型、任意状态套接口的设置选项值。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。

setsockopt函数

setsockopt函数,用于任意类型、任意状态套接口的设置选项值。

#include <sys/types.h>
#include <sys/socket.h>
int setsockopt(int sockfd, int level, int optname, 
               const void *optval, socklen_t optlen);
  1. sockfd:标识一个套接口的描述字。
  2. level:选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
  3. optname:需设置的选项。
  4. optval:指针,指向存放选项待设置的新值的缓冲区。
  5. optlen:optval缓冲区长度。

有两种套接口的选项(optname):

  • 一种是布尔型选项,允许或禁止一种特性;
    允许一个布尔型选项,则将optval指向非零整形数;
    禁止一个选项optval指向一个等于零的整形数;
    对于布尔型选项,optlen应等于sizeof(int)。
  • 一种是整型或结构选项。
    对于整型或结构选项,optval指向包含所需选项的整形数或结构;
    optlen则为整形数或结构的长度。
选项类型意义
SO_BINDTODEVchar*将套接字绑定到指定端口。
SO_BROADCASTBOOL允许套接口传送广播信息。
SO_DEBUGBOOL记录调试信息。
SO_DONTLINERBOOL不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零。
SO_DONTROUTEBOOL禁止选径;直接传送。
SO_KEEPALIVEBOOL发送“保持活动”包。
SO_LINGERstruct linger FAR*如关闭时有未发送数据,则逗留。
SO_OOBINLINEBOOL在常规数据流中接收带外数据。
SO_RCVBUFint为接收确定缓冲区大小。
SO_REUSEADDRBOOL允许套接口和一个已在使用中的地址捆绑(参见bind())。
SO_SNDBUFint指定发送缓冲区大小。
TCP_NODELAYBOOL禁止发送合并的Nagle算法。

TCP_NODELAY是唯一使用IPPROTO_TCP层的选项,其他所有选项都使用SOL_SOCKET层。




getsockopt()函数

getsockopt()函数,用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。

#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t*optlen);
  1. sockfd:一个标识套接口的描述字。
  2. level:选项定义的层次。例如,支持的层次有SOL_SOCKET、IPPROTO_TCP。
  3. optname:需获取的套接口选项。
  4. optval:指针,指向存放所获得选项值的缓冲区。
  5. optlen:指针,指向optval缓冲区的长度值。

被选中选项的值放在optval缓冲区中。optlen所指向的整形数在初始时包含缓冲区的长度,在调用返回时被置为实际值的长度。对SO_LINGER选项而言,相当于linger结构的大小,对其他选项来说,是一个整形数的大小。
如果未进行setsockopt()调用,则getsockopt()返回系统缺省值。

选项类型意义
SO_ACCEPTCONNBOOL套接口正在用listen()监听。
SO_BROADCASTBOOL套接口设置为传送广播信息。
SO_DEBUGBOOL允许调试。
SO_DONTLINERBOOL若为真,则SO_LINGER选项被禁止。
SO_DONTROUTEBOOL禁止选径。
SO_ERRORint获取错误状态并清除。
SO_KEEPALIVEBOOL发送“保持活动”信息。
SO_LINGERstruct linger FAR*返回当前各linger选项。
SO_OOBINLINEBOOL在普通数据流中接收带外数据。
SO_RCVBUFint接收缓冲区大小。
SO_REUSEADDRBOOL套接口能和一个已在使用中的地址捆绑。
SO_SNDBUFint发送缓冲区大小。
SO_TYPEint套接口类型(如SOCK_STREAM)。
TCP_NODELAYBOOL禁止发送合并的Nagle算法。

其中“类型”栏指出了optval所指向的值。仅有TCP_NODELAY选项使用了IPPROTO_TCP层;其余选项均使用SOL_SOCKET层。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值