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 获取/设置加入的多播组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/154624.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊统一认证中的四种安全认证协议(干货分享)

大家好&#xff0c;我是陈哈哈。单点登录SSO的出现是为了解决众多企业面临的痛点&#xff0c;场景即用户需要登录N个程序或系统&#xff0c;每个程序与系统都有不同的用户名和密码。在企业发展初期&#xff0c;可能仅仅有几个程序时&#xff0c;管理账户和密码不是一件难事。但…

最优值函数

一、最优状态值函数 解决强化学习任务大致上意味着找到一种政策&#xff0c;能够在长期内实现很多奖励。对于有限MDPs&#xff0c;我们可以精确地定义一种最优政策&#xff0c;其定义如下。值函数定义了政策的一种部分排序。如果一个政策的预期回报大于或等于另一个政策π0在所…

【PC】特殊空投-2023年10月

亲爱的玩家朋友们&#xff0c;大家好&#xff01; 10月特殊空投活动来袭。本月我们也准备了超多活动等着大家来体验。快来完成任务获得丰富的奖励吧&#xff01;签到活动&#xff0c;每周一次的PUBG空投节&#xff0c;还有可以领取PGC2023免费投票劵的活动等着大家&#xff01;…

Python程序设计期末复习笔记

文章目录 一、数据存储1.1 倒计时1.2 os库1.3 字符串操作1.4 文件操作1.5 列表操作1.6 元组1.7 字典 二、文本处理及可视化2.1 jieba分词2.2 集合操作2.3 pdf文件读取2.4 参数传递2.5 变量作用域 三、数据处理分析3.1 Sumpy3.2 Matplotlib3.3 Numpy 四、Pandas4.1 索引操作4.2 …

Qwt QwtScaleDraw自定义坐标轴

1.概述 QwtScaleDraw 是 Qt 绘图库 Qwt 中的一个类&#xff0c;用于绘制坐标轴刻度线和刻度标签。它提供了一些方法和属性来设置刻度线和标签的样式、布局和对齐方式。 以下是类继承关系&#xff1a; 2.常用方法 标签相关方法&#xff1a; setLabelRotation(double angle)&…

开源库存管理系统InvenTree的安装

本文是应网友 shijie880500 要求折腾的&#xff1b; 什么是 InvenTree &#xff1f; InvenTree 是一个开源的库存管理系统&#xff0c;提供强大的低级别库存控制和零件跟踪。InvenTree 系统的核心是 Python/Django 数据库后端&#xff0c;它提供了一个管理界面&#xff08;基于…

将字符串中符合规则的元素替换为指定元素 re.sub()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串中符合规则的元素 替换为指定元素 re.sub() 选择题 请问re.sub(r[0-9],*,s)的结果是&#xff1a; import re s "hello123" print("【显示】s ",s) print(&quo…

前端包管理工具详解

一、npm包管理工具 1.代码共享方案 我们已经学习了在JavaScript中可以通过模块化的方式将代码划分成一个个小的结构&#xff1a; 在以后的开发中我们就可以通过模块化的方式来封装自己的代码&#xff0c;并且封装成一个工具&#xff1b;这个工具我们可以让同事通过导入的方式…

软考系统架构师知识点集锦九:数据库系统

一、考情分析 二、考点精讲 2.1数据库概述 2.1.1数据库模式 (1)三级模式:外模式对应视图&#xff0c;模式(也称为概念模式)对应数据库表&#xff0c;内模式对应物理文件。(2)两层映像:外模式-模式映像&#xff0c;模式-内模式映像;两层映像可以保证数据库中的数据具有较高的…

如何在Android设备上检查应用程序使用情况,包括使用时间

你可能不知道自己花了多少时间在手机上。很可能你一天中有一半的时间都在盯着手机屏幕。如果你怀疑这一事实,你会很快核实的。在这篇文章中,我们将向你介绍如何在Android设备上检查应用程序的使用情况。 如何在Android上检查应用程序电池使用情况 你使用时间最长的应用程序…

delphi 11.3 FastReport 多设备跨平台 打印之解决方法

以下能WINDOWS10 DELPHI 11.3 FastReport6.0上顺利通过 FastReport6.2对Multi-Device Application应用的支持不够友好&#xff0c;如下图&#xff1b;在palette FastReport6.0才出现几个制件。 非Multi-Device Application应用时是一大堆&#xff1b; 非Multi-Device Appl…

C++笔记-RTTR编译安装简单使用

这里以Linux为例&#xff0c;我使用的机器的gcc版本是4.9.2 使用的RTTR的版本是0.9.5 编译&安装 首先在官网将rttr的0.9.5版本下载下来。 Home |RTTR 按照官方的安装流程&#xff1a; 但这里可能会出现一个问题&#xff1a; 按照解答&#xff0c;切换成root用户&#x…