linux套接字选项API

编程入门 行业动态 更新时间:2024-10-26 16:31:21

linux套接字<a href=https://www.elefans.com/category/jswz/34/1771211.html style=选项API"/>

linux套接字选项API

获取套接字的选项值(getsockopt)

【头文件】
#include <sys/types.h>
#include <sys/socket.h>
【函数原型】
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
【函数功能】         用于获取一个套接字的选项 【参数含义】         [sockfd]: 待获取的通信套接字         [level]:协议层次,有如下选项:                 SOL_SOCKET 套接字层次                 IPPROTO_IP ip 层次                 IPPROTO_TCP TCP 层次         [optname]: 选项名字,对于套接字层次有下面一些选项                 SO_BROADCAST 是否允许发送广播信息                 SO_REUSEADDR 是否允许重复使用本地地址 SO_SNDBUF 获取发送缓冲区长度                 SO_RCVBUF 获取接收缓冲区长度                 SO_RCVTIMEO 获取接收超时时间                 SO_SNDTIMEO 获取发送超时时间         [optval]: 用来保存获取到的选项值         [optlen]: 用来保存选项值得长度 【返回值】         成功返回 0         失败返回-1,同时 errno 被设置 【示例】         获取发送缓冲区为多少 k 内存
int opt_val;
socklen_t opt_len = sizeof(opt_val);
if(getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt_val, &opt_len) < 0)
{perror("fail to getsockopt");
}
printf("send_buf = %dk\n", opt_val / 1024);

设置套接字的选项值(setsockopt)

【头文件】
#include <sys/types.h>
#include <sys/socket.h>
【函数原型】
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
【函数功能】         用于设置一个套接字的选项   【参数含义】         [sockfd]: 待设置的通信套接字         [level]:协议层次,有如下选项:                 SOL_SOCKET 套接字层次                 IPPROTO_IP ip 层次                 IPPROTO_TCP TCP 层次         [optname]: 选项名字,对于套接字层次有下面一些常用选项                 SO_BROADCAST 是否允许发送广播信息                 SO_REUSEADDR 是否允许重复使用本地地址                 SO_SNDBUF 获取发送缓冲区长度                 SO_RCVBUF 获取接收缓冲区长度                 SO_RCVTIMEO 获取接收超时时间                 SO_SNDTIMEO 获取发送超时时间         对于 IP 层次有下面常用选项                 IP_ADD_MEMBERSHIP 获取/设置加入的多播组         [optval]: 设置的选项值          [optlen]: 设置的选项值得长度 【返回值】         成功返回 0         失败返回-1,同时 errno 被设置 【示例】         设置当前的拖延值
struct linger
{u_short l_onoff;u_short l_linger;
};struct linger m_sLinger;
m_sLinger.l_onoff=1;//(在 closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
// 如果 m_sLinger.l_onoff=0;则功能和 2.)作用相同;
m_sLinger.l_linger=5;//(容许逗留的时间为 5 秒)
setsockopt(s,SOL_SOCKET,SO_LINGER,(constchar*)&m_sLinger,sizeof(linger));

选项汇总

套接字层次

选项名 选项值 数据类 访问权限 说明
SO_ACCEPTCONN Bool get 如为 TRUE,表明套接字处于监听模式
SO_BROADCAST bool get/set 如 TRUE,表明套接字已配置成对广播 消息进行发送
SO_CONNECT_TIME int get 返回套接字建立连接的时间,以秒为 单位,如尚未连接,返回 0xffffffff
SO_DEBUG bool Get/set 如果 TRUE,就允许调试输出 (W32 不 支持)
SO_DONTLINGER bool Get/set 如果是 TRUE,则禁用SO_LINGER
SO_LINGER struct linger get/set 设置或获取当前的拖延值
SO_DONTROUTE bool get/set 如果 TRUE,便直接向网络接口发送消息,毋需查询路由表
SO_ERROR bool get 返回错误状态
SO_EXCLUSIVEADDRUSE bool get/set 如果 TRUE,套接字绑定那个本地端口就不能重新被另一个进程使用
SO_KEEPALIVE bool get/set 如果 TRUE,套接字就会进行配置,在会话过程中发送”保持活动”消息
SO_MAX_MSG_SIZE unsign ed int get 对一个面向消息的套接字来说,一条消息的最大长度
SO_OOBINLINE bool get/set 如果是 TRUE,带外数据就会在普通数据流中返回 (W32 不支持)
SO_PROTOCOL_INFO WSAPRO TOCOL_ INFO get 套接字绑定的那种协议的特征
SO_RCVBUF int get/set 面向接收操作,为每个套接字分别获取或设置缓冲区长度
SO_REUSEADDR bool get/set 如果是 TRUE,套接字就可与一个正由其他套接字使用的地址绑定到一起,或与处在 TIME_WAIT 状态的地址绑定到一起
SO_SNDBUF bool get/set 设置分配给套接字的数据发送缓冲区的大小
SO_TYPE int get 返回指定套接字的类型(如 SOCK_DGRAM 和 SOCK_STREAM 等等)
SO_SNDTIMEO int get/set 获取或设置套接字上的数据发送超时时间(以毫秒为单位)
SO_RCVTIMEO int get/set 获取或设置与套接字上数据接收对应的超时时间值(以毫秒为单位)
SO_UPDATE_ACCEPT_CONTEXT SOCKET get/set 更新 SOCKET 状态

IP 层次

TCP 层次

IP_ADD_MEMBERSHIP ip_mreq get/set 获取/设置加入的多播组

更多推荐

linux套接字选项API

本文发布于:2023-12-03 09:34:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653821.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:选项   linux   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!