关于setsocketopt函数

setsockopt 函数功能及参数详解 setsockopt() 函数用于任意类型、任意状态套接口的设置选项值 阅读详情
1. 每个套接口都有一个发送缓冲区和一个接收缓冲区。 接收缓冲区被TCP和UDP用来将接收到的数据一直保存到由应用进程来 读。 TCP:TCP通告另一端的窗口大小。 TCP套接口接收缓冲区不可能溢出,因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控 制,如果对方无视窗口大小而发出了超过宙口大小的数据,则接 收方TCP将丢弃它。 UDP:当接收到的数据报装不进套接口接收缓冲区时,此数据报就被丢 弃。UDP是没有 流量控制的;快的发送者可以很容易地就淹没慢的接收者,导致接收方的UDP丢弃数据报。
2.我们经常听说tcp协议的三次握手,但三次握手到底是什么,其细节是什么,为什么要这么做呢?
第一次:客户端发送连接请求给服务器,服务器接收;
第二次:服务器返回给客户端一个确认码,附带一个从服务器到客户端的连接请求,客户机接收,确认客户端到服务器的连接.
第三次:客户机返回服务器上次发送请求的确认码,服务器接收,确认服务器到客户端的连接.
我们可以看到:
1. tcp的每个连接都需要确认.
2. 客户端到服务器和服务器到客户端的连接是独立的.
我们再想想tcp协议的特点:连接的,可靠的,全双工的,实际上tcp的三次握手正是为了保证这些特性的实现. [/code]
3.setsockopt的用法

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));


2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));


3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
int nNetTimeout=1000;//1秒
//发送时限
setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//接收时限
setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));


4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节
(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据
和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:
// 接收缓冲区
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));


5. 如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响
程序的性能:
int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));


6.同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):
int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));


7.一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性:
BOOL bBroadcast=TRUE;
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL));


8.在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可
以设置connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的
作用,在阻塞的函数调用中作用不大)
BOOL bConditionalAccept=TRUE;
setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL));


9.如果在发送数据的过程中(send()没有完成,还有数据没发送)而调用了closesocket(),以前我们
一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了,如何设置让程序满足具体
应用的要求(即让没发完的数据发送出去后在关闭socket)?
struct linger {
u_short l_onoff;
u_short l_linger;
};
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,(const char*)&m_sLinger,sizeof(linger));

socket setsocketopt函数的使用示例 如果socket中是使用的阻塞的方式来进行发送接收数据,肯定设计一个接收/发送数据超时的问题,设置的方式是使用setsocketopt函数来实现;这个就是个小例子 立即下载

相关推荐

基于live555实现一个rtsp客户端程序

本文介绍了基于live555流媒体库实现的RTSP客户端程序,能够通过RTSP地址获取H.264/H.265裸码流或TS流数据并存入本地文件。详细阐述了使用CLion搭建工程的代码架构和CMake配置,重点分析了TS流解析模块的实现,包括TS包结构解析、PES包提取和ES裸流获取的完整流程。文章提供了TS/PES/ES三种数据包的协议说明,并给出了从TS流中提取视频帧的具体方法,最后附有工程代码下载链接。该方案实现了RTSP流媒体接收、解析和存储的完整功能链。

kk821521286的博客 790

setsocketopt()函数功能介绍

本文转自与启云的setsocketopt()函数功能介绍 setsocketopt()函数功能介绍 功能描述:获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由T...

qq_2501341465的博客 5917

c语言压力变送器程序设计,基于单片机的压力变送器设计

基于单片机的压力变送器设计(任务书,开题报告,外文翻译,论文15000字,代码)摘要随着工业化水平的不断提高,新型智能仪表在工业生产过程中运用也越来越广泛,同时对输出数据的准确检测和处理也变得至关重要。生产过程的运行和设备安全是极其重要的,那么如何实现对其精确的检测呢?众所周知,在工业生产过程中有一个很重要参数——压力,显然这个参数是一个必不可少的条件。故而,研究智能压力变松器系统对工业生产有着不...

weixin_33681561的博客 1963

socket选项_总结

功能描述:      获取或设置与某个套接字关联的选项。      选项可能位于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时, 选项位于的层和选项的名称必须给出。例如:要操作套接字层的选项,将level=SOL_SOCKET; 其它层,控制选项的合适协议号必须给出,例如:为了表示一个选项由TCP协议解析,level=TCP 设置/获取socket选项: #in

nature_XD的专栏 1098

Ubuntu关闭更新提醒的三层控制方法:从GUI到APT配置

Linux系统更新机制本质上是包管理器(APT)驱动的自动化运维流程,其核心原理在于分离‘元数据刷新’、‘安全补丁安装’和‘用户通知’三个职能。这种分层设计既保障了基础安全性,又为系统管理员提供了策略定制空间。技术价值体现在提升生产环境稳定性、规避未经验证的内核/驱动升级风险,并支持ROS、Blender渲染、工业控制等对时序敏感的应用场景。本文聚焦Ubuntu系统入门教程中高频需求——科学关闭软件更新提醒,覆盖Ubuntu 20.04及LTS版本的GUI设置、systemd服务禁用与APT配置修改三大实操

weixin_29698641的博客 394

某东x-api-eid-token风控参数分析与破解

x-api-eid-token是京东的风控参数,在接口当中,如果没有该参数,有一定的概率能请求成功,但是在请求一段时间后,会报403权限失败的,该参数主要通过jsTk.do这个接口生成,并且会将其存储到cookie当中。

zhouzhou_98的博客 1552

setsocketopt()

在TCP连接中,recv等函数默认为阻塞模式(block),即直到有数据到来之前函数不会返回,而我们有时则需要一种超时机制使其在一定时间后返回而不管是否有数据到来,这里我们就会用到setsockopt()函数:int setsockopt(int s, int level, int optname, void* optval, socklen_t* optlen); 这里我们要涉及到...

weixin_30564785的博客 389

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2316

端口重用、setsocketopt函数的使用

端口重用介绍:http://mobile.51cto.com/hot-557084.htm setsocketopt函数转载自:https://www.cnblogs.com/eeexu123/p/5275783.html setsockopt()函数功能介绍 功能描述: 获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套...

寂蝶难双,窃窃思羽. 1646

javascript 酷炫时钟

javascript 酷炫时钟

liuhao9999的博客 631

SAP MD09 事务码中的物料需求追溯详解

物料需求追溯是指在物料需求计划中,追踪特定物料的需求来源和满足方式的过程。它帮助企业确定每个需求(如销售订单、独立需求、预留等)是由哪些供应元素(如库存、生产订单、采购订单等)来满足的。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1196

关于setsocketopt函数 .

1. [code]每个套接口都有一个发送缓冲区和一个接收缓冲区。 接收缓冲区被TCP和UDP用来将接收到的数据一直保存到由应用进程来读。 TCP:TCP通告另一端的窗口大小。 TCP套接口接收缓冲区不可能溢出,因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过宙口大小的数据,则接 收方TCP将丢弃它。 UDP:当接收到的数据报装不进套接口接收缓冲

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1038

风控域——决策引擎系统设计

本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具,可自动化、数据驱动地辅助或替代人工决策,广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能,包括自动化决策、动态规则管理、实时处理和模型集成,以及系统组成,涵盖数据输入层、规则引擎和模型服务层。此外,还探讨了决策引擎的典型应用场景、技术架构、组件设计,以及风控决策引擎系统的技术方案、设计难点和重点。

庄小焱 3320

setsocketopt函数使用的教训 linux c 语言

几天前写了个ftp作业 并不是很满意 不过学到了很多东西 为了做服务器的流量控制,尝试控制tcp传输的报文长度 本人比较笨,加之是菜鸟,manpage什么的也不懂得去看 绕了很多弯路 在此先盖个楼 考试复习无聊之余慢慢填满 在此总结下经验教训 1.使用这些函数首先要看api setsocketopt:传送门 http://blog.youkuaiyun.com/chary8088/article

oe1019的专栏 2457

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

zmq_setsocketopt函数的作用

请注意,某些选项可能仅适用于特定类型的套接字(如 PULL、PUSH、PUB、SUB 等),并且某些选项可能在套接字创建后就不能更改。zmq_setsockopt 是 ZeroMQ(ZMQ)库中的一个函数,用于设置套接字(socket)的选项或属性。这些选项用于指定套接字是否应该作为 CURVE 安全性机制的服务器,并设置相应的服务器密钥。ZMQ_SUBSCRIBE 和 ZMQ_UNSUBSCRIBE:用于设置套接字的订阅和取消订阅选项,以控制接收哪些消息。设置 GSSAPI 主体的名称。

slty_123的博客 425

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux下getsocketopt 与 setsocketopt函数说明

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

lrh406317290的专栏 6331

计算机网络:服务器处理多客户端(并发服务器)

/必须在调用binf函数之前设置。注意:int reuse = 1;//设置SO_RESUEADDR选项,允许地址重用。(二)accpet:请求队列中提取已连接的请求,返回连接好的fd(循环accpet即可)(一)listen:监听客户端的连接请求,放入请求队列。(二)复用:一个进程或者线程处理多个任务。4.select函数。(一)setsocketopt函数。(三)IO的处理模型。

2501_91498265的博客 400

套接字选项

getsocketopt 获得与给定套接字相关的相关信息。其定义如下: int getsocketopt( SOCKET s, int level, int optname, char FAR* optval, int FAR* optlen ); s:其为一个给定的套接字,这个套接字必须有效 level:为一个选项

无语的阿辉 5261

setsocketopt()留着看

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

zlm_250的专栏 775

TCP/IP 插口选项

引言 本文会对插口层做一个了断。插口层的修改和系统调用将在本节讨论。 主要函数是setsockopt getsockopt系统调用 setsocketopt函数 此函数可以访问不同的协议层。主要应用是对于setsocketopt和getsocketopt选项。 sosetopt函数 sosetopt函数处理所有插口级的选项,并且将其他的选项传给插口相关联的pr_ctlout...

weixin_34262482的博客 166

setsocketopt设置socket应用

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_W

清雨小竹 1423
上一篇: Socket send函数和recv函数详解
下一篇: 关于阻塞和非阻塞模式的socket
overpread
博客等级 码龄19年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值