getsockopt/setsockopt函数说明(二)

从MATLAB到版图:手把手复现一篇16位1MSPS SAR ADC的完整设计流程(含Cadence与Verilog代码) 本文详细介绍了16位1MSPS SAR ADC的完整设计流程,从MATLAB行为级建模到Cadence电路实现,再到Verilog数字逻辑编码和版图生成。重点讲解了高精度逐次逼近型模数转换器的关键技术,包括电容阵列建模、校准算法实现、FFT性能验证以及混合信号仿真等,为工程师提供了实用的工业级设计指南。 阅读详情

SO_LINGER的这种操作模式是由linger结构来控制的:
struct linger {
int l_onoff;
int l_linger;
};
成员l_onoff为一个布尔值,非零值表示TRUE,而零则表示FALSE。这个选项的三个值描述如下:

1 设置l_onoff为FALSE使得成员l_linger被忽略,而使用默认的close行为。也就是说,close调用会立即返回给调用者,如果可能将会传输任何未发送的数据。
2 设置l_onoff为TRUE将会使得成员l_linger的值变得重要。当l_linger非零时,这代表应用在close函数调用上的以秒计的超时时限。如果超时发生之前,有未发送的数据并且成功关闭,函数将会成功返回。否则,将会返回错误,而将变量errno的值设置为EWOULDBLOCK。
3 将l_onoff设置为TRUE而l_linger设置为零时使得连接中止,在调用close时任何示发送的数据都会丢弃。

我们也许希望得到一些建议,在我们的程序中使用SO_LINGER选项,并且提供一个合理的超时时限。然后,可以检测由close函数的返回值来确定连接是否成功关闭。如果返回了一个错误,这就告知我们的程序也许远程程序并不能接收我们发送的全部数据。相对的,他也许仅意味着连接关闭时发生的问题。

然而,我们必须保持清醒,这样的方法在一些服务器设计中会产生新的问题。当在close函数调用上将SO_LINGER选项配置为超时(linger),当我们的服务器在close函数调用中执行超时时会阻止其他的客户端进行服务。如果我们正在一个进程中服务多个客户端进程时就会存在这个问题。使用默认的行为也许更为合适,因为这允许close函数立即返回。而任何未发送的数据也会为内核继续发送。

最后,如果程序或是服务器知道连接应何时中止时可以使用中止行为。这也许适用于当服务器认为没有访问权限的用户正试着进行访问的情况。这种情况下的客户并不会得到特别的关注。


 

下面的代码是一个使用SO_LINGER选项的例子,使用30秒的超时时限:
#define TRUE 1
#define FALSE 0
int z; /* Status code
*/ int s; /* Socket s */
struct linger so_linger;
...
so_linger.l_onoff = TRUE;
so_linger.l_linger = 30;
z = setsockopt(s,
SOL_SOCKET,
SO_LINGER,
&so_linger,
sizeof so_linger);
if ( z )
perror("setsockopt(2)");

下面的例子显示了如何设置SO_LINGER的值来中止套接口s上的当前连接:
#define TRUE 1
#define FALSE 0
int z; /* Status code */
int s; /* Socket s */
struct linger so_linger;
...
so_linger.l_onoff = TRUE;
so_linger.l_linger = 0;
z = setsockopt(s,
SOL_SOCKET,
SO_LINGER,
&so_linger,
sizeof so_linger);
if ( z )
perror("setsockopt(2)");
close(s); /* Abort connection */

在上面的这个例子中,当调用close函数时,套接口s会立即中止。中止的语义是通过将超时值设置为0来实现的。

设置SO_KKEPALIVE选项

当使用连接时,有时他们会空闲相当长的时间。例如,建立一个telnet会话通过访问股票交易服务。他也许会执行一些初始的查询,然后离开连接而保持服务打开,因为他希望回来查询更多的内容。然而,同时连接处理空闲状态,也许一次就是一个小时。

任何一个服务器认为他有一个连接的客户时会为其分配相应的资源。如果服务器是一个派生类型(fork),那么整个Linux进程及其相应的内存都分配给这个客户。如果事情顺利,这个场景并不会产生任何问题。然而当出现网络崩溃时,困难出现了,我们所有的578个客户都会从我们的股票交易服务中失去连接。

在网络服务恢复后,578个客户会试着连接到我们的服务器,重建连接。这对于我们来说是一个真实的问题,因为我们的服务器在之前并没有意识到他失去了空闲客户--SO_KKEPALIVE来解决这个问题。

下面的例子显示了如何在套接口s上使用SO_KKEPALIVE选项,从而一个断开的空闲连接可以被检测到:
#define TRUE 1
#define FALSE 0
int z; /* Status code */ int s; /* Socket s */
int so_keepalive;
...
so_keepalive = TRUE;
z = setsockopt(s,
SOL_SOCKET,
SO_KEEPALIVE,
&so_keepalive,
sizeof so_keepalive);
if ( z )
perror("setsockopt(2)");

在上面的例子中设置了SO_KEEPALIVE选项,这样当套接口连接空闲相当长的时间时,一个探测信息(probe message)就会发送到远程端。这通常是在两个小时的无活动后完成的。对于一个保持活动的探测信息会有三个可能的反应。他们分别是:
1 端会合适的返回表明一切正常。并没有向程序返回任何指示信息,因为这是程序假定的开始。
2 端响应表明他对连接一无所知。这表明端自上次通信以后与主机进行重新连接。这样当下次套接口操作时会向程序返回ECONNRESET错误代码。
3 端没有响应。在这种情况下,内核也许做了几次尝试进行连接。如果没有响应请求,TCP通常会在大约11分钟内放弃。当这种情况发生时,在下次套接口操作时会返回ETIMEOUT错误。其他的错误,例如EHOSTUNREACH会在网络不再能到达主机时返回。

SO_KEEPALIVE 所调用的时间框架会限制他通常的用处。探测信息也只在大约两个小时的无活动后才会发送。然后,当没有响应时,在连接返回错误时还需要另外的11分钟。无论怎样,这个选项确实允许探测空闲的无连接套接口,然后由服务器进行关闭。相应的,支持长空闲连接的服务器应允许这个特征。

设置SO_BROADCAST选项

我们现在还没有讨论到使用UDP进行广播的主题。然而,我们很容易意识到广播功能的误用以及所造成的网络灾难。为了避免在没有计划广播时进行广播,套接口禁用了广播功能。如果确实需要广播,那么C程序员要为套接口的这个功能处理相应的麻烦。

SO_BROADCAST是一个布尔标志选项,由int数据类型进行设置。下面的例子显示了如何设置SO_BROADCAST选项:
#define TRUE 1
#define FALSE 0
int z; /* Status code */
int s; /* Socket s */
int so_broadcast;
...
so_broadcast = TRUE;

z = setsockopt(s,
SOL_SOCKET,
SO_BROADCAST,
&so_broadcast,
sizeof so_broadcast);
if ( z )
perror("setsockopt(2)");
如果要setsockopt函数返回零,套接口s已经允许进行广播。然而在这里要注意的是所选用的套接口类型必须具有广播功能,例如UDP套接口。

设置SO_OOBINLINE选项

在一些情况下,已发送的数据也许会超过所限制的数据量。通常,这些越界的数据是用不同于通常的数据接收函数来进行接收的。然而有时却更喜欢使用通常的方式来接收这些越界数据。当选择这种方法时,越界数据作为通常数据流的一部分在通常数据之前到达。

要使用这个特征,我们可以用下面的代码来完成:
#define TRUE 1
#define FALSE 0
int z; /* Status code */
int s; /* Socket s */
int so_oobinline;
...
so_oobinline = TRUE;
z = setsockopt(s,
SOL_SOCKET,
SO_OOBINLINE,
&so_oobinline,
sizeof so_oobinline);
if ( z )
perror("setsockopt(2)");
在设置了SO_OOBINLINE选项之后,越界数据就会与通常数据一起接收。在这种方式下,所接收的越界数据与通常数据相同。

SO_PASSCRED与SO_PEERCRED选项

这些选项仅适用于PF_UNIX(PF_LOCAL)套接口。这些选项用来在当前主机的本地套接口上控制与传递凭证。这也许是最难掌握的一个主题。就现在而言,我们只需要简单的注意到,如果我们希望编写服务本地主机客户的服务程序时,我们也许会对这两个选项感兴趣。

转自:http://ffwmxr.blog.163.com/blog/static/66372722201192214651351/

【OWL部署】Manus又一开源平替OWL真的很好用吗?手把手带你部署并运行你的AI助手OWL(对接Qwen、硅基流动接口) 本文介绍了通用人工智能OWL的部署及国内接口对接,全篇干货满满,手把手教学。 阅读详情

相关推荐

caxa二次开发实例展示

本人有8年CAXA各产品(如电子图版、工艺图表、PDM等)二次开发经验,参与过国家电网南瑞集团、中石油、龙记集团、欧姆龙集团、港日集团、中集集团、中国五矿、方圆塑机、大连锅炉、金蝶PDM集成CAXA,TEAMCENTER集成CAXA、大连锅炉机械、中国中车等项目的开发,擅长CAXA电子图版、CAXA工艺图表的二次开发,有需要的可以联系我,电话:13169467685、13249738576 Q

hourui800720的专栏 8030

网络编程之linger结构体

TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式. 那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger 结构体属性。 linger 结构体 数据结构如下: struct linger { int l_onoff; int l_linger; }; 有三种组合方式: 第一种 l_onoff = 0; l_linger忽略 这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就 是优雅的退出。 第二种 l

weixin_44705391的博客 932

硬件即代码:用软件工程思维拆解F450无人机装配的模块化设计哲学

本文探讨了如何用软件工程思维重构DJI-F450无人机的模块化设计,将硬件装配提升为可编程系统。通过硬件抽象层、控制系统分层架构和扩展槽位设计模式,展示了无人机装配的模块化哲学,并结合实际案例说明如何优化性能与安全性。

weixin_29294975的博客 387

sockopt套接字选项操作

参考:《UNIX 网络编程 · 卷1 : 套接字联网API》 获取和设置套接字选项的方法: getsockopt 和 setsockfopt函数 fcntl 函数 ioctl 函数 getsockopt & setsockopt函数 这两个函数仅用于套接字。 #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void* optval, socklen_t* optlen); int

code_peak 2148

在cadence中进行sdf文件的反标及并进行数模混仿

3.在Main-Include Option Settings-Libraries Files/Directories下面加载上面说到的两个.v文件(综合文件和工艺库器件文件),其他默认点击OK;最近在做一个数模混合电路的流片工作,数字部分综合后会生成一个.sdf(标准延时格式)文件,正常来说应该是要在vcs软件上进行电路延时的反标,但由于我的电路需要信号在数字模块和模拟模块中来回循环多次,因此,打算在cadence中完成sdf文件反标,进行数模混合仿真。1.综合生成的电路网表的.v文件;

WSBHX的博客 3280

FPGA上跑100G网卡?手把手教你用Xilinx IP核配置RDMA(附避坑指南)

本文详细介绍了如何在Xilinx UltraScale+ FPGA平台上配置100G RDMA网络加速方案,涵盖CMAC和ERNIC IP核的深度配置技巧、硬件架构设计及系统集成。通过实战指南和避坑建议,帮助开发者实现超低延迟、零拷贝的数据传输,显著提升数据中心和高性能计算的网络性能。

weixin_33734785的博客 676

<转>Linux Socket学习(十二)

bsp; int l_onoff; int l_linger; }; 成员l_onoff为一个布尔值,非零值表示TRUE,而零则表示FALSE。这个选项的三个值描述如下: 1 设置l_onoff为FALSE使得成员l_linger被忽略,而使用默认的close行为。也就是说,close调用会立即返回给调用者,如果可能将会传输任何未发送的数据。 2 设置l_onof...

i54fx的专栏 237

checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have “100020bf 解决方案

 本文主要介绍了checking OpenSSL library version… configure: error: OpenSSL >= 1.1.1 required (have “100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)”)解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

Linux Kernel 学习笔记17:内核与用户层通信之sockopt

(本章基于:Linux-4.4.0-37) sockopt是内核与用户层通信方法中非常简单的一种,其本质是通过copy_to_user/copy_from_user在内核与用户层传递数据,因此效率不高,常用于传递控制、状态等信息; 内核层: 数据结构: linux/netfilter.h static struct nf_sockopt_ops my_sockopt_ops

stone8761的专栏 3530

php环境如何实现国密SM2相关功能

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1616

别再无脑调打码平台了!聊聊 ddddocr 在爬虫验证码识别中的真实边界

ddddocr是国产开源社区的优秀成果,它大幅降低了验证码识别的入门门槛。工具的自由不等于工程的自由。真正的能力不在于“会不会调库”,而在于能否准确判断工具的适用边界、构建鲁棒的容错机制、并在成本与效果之间做出理性权衡。下次当你准备在爬虫中加入验证码识别时,不妨先问自己:这个站点的验证码类型是否在ddddocr的能力圈内?我的预处理是否针对该站点做过专项调试?我的失败重试和监控机制是否完备?如果三个问题都能肯定回答,那么ddddocr就是你的利器;如果有任何一个犹豫,请先补齐短板再上路。评论区交流:你用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1283

LINUX socketopt 设置

功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位 于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须 给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。 用法:#incl...

weixin_30307921的博客 499

LDO的原理及测试方法

这是LM317芯片的核心,这个电路单元称为Bandgap Reference带隙基准源。属于模拟集成电路中的经典电路结构。常见的基本结构利用VBE的负温度系数,而VT是正温度系数,正负温度系数抵消就的得到稳定的基准参考电压了(三极管的方程VBE=VT*In(lC/IS))。

shiwei0813的博客 1158

Linux下getsockopt/setsockopt 函数说明

Linux下getsockopt/setsockopt 函数说明【 getsockopt/setsockopt系统调用】       功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其

xioahw的专栏 5万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TCP/IP编程之getsockopt/setsockopt函数详解

前述: 有很多方法来获取和设置影响套接字的选项: · getsockopt和setsockopt函数 · fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的POSIX的方式 · ioctl函数 这篇文章只讨论getsockopt和setsockopt函数 函数原型: GETSOCKOPT(2) Linux Pr

daiyudong2020的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux下 getsockopt/setsockopt 函数使用说明

getsockopt, setsockopt - 获取或设置socket套接字相关的选项函数使用函数原型: int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const voi

u012707739的博客 4093

getsockopt/setsockopt 函数说明

<br /><br />【 getsockopt/setsockopt系统调用】   <br />    <br />功能描述: <br />获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。<br /><br />用法: <

Pspio的专栏 5504

setsockopt和getsockopt函数解析

socksetopt函数解析: 头文件:#include #include 函数原型:int socksetopt(int sockfd, int level, int optname, const void * optival, socklen_t optlen); 功能:用于任意类型、任意状态套接口的设置选项值. 参数: sockfd:标识一个套接口的描述字;

diaolingle的专栏 7542

setsockopt()函数和getsockopt()函数

setsockopt()函数功能介绍 int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); 功能描述: 获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示

qq_20853741的博客 1139

Linux高级--2.4.4 setsockopt/getsockopt 使用的最全举例

setsockopt函数是一个非常强大的工具,用来调整套接字的各种参数。通过合理设置 TCP 相关的选项,可以优化网络通信的性能、控制超时和重传策略、减少延迟等。在实际应用中,应该根据具体需求调整这些参数。例如,对于高并发应用,可以调整缓冲区大小;对于需要快速响应的实时应用,可以禁用 Nagle 算法或启用 TCP Fast Open 等。通过setsockopt函数,UDP 套接字可以调整许多与数据传输、缓冲区大小、多播、广播等相关的选项。

weixin_44209111的博客 1564

LINUX下GETSOCKOPT/SETSOCKOPT 函数说明

【 getsockopt/setsockopt系统调用功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP...

duanchitan5407的博客 870
上一篇: getsockopt/setsockopt函数说明(一)
下一篇: 一些GDB的使用方法
tinyhare
博客等级 码龄15年 11粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值