飞鸽源码分析之socket bind

setsockopt 函数功能及参数详解 setsockopt() 函数用于任意类型、任意状态套接口的设置选项值 阅读详情


[size=1em]常见问题解答(IPMsg FAQ)飞鸽源码[socket]如何解除绑定bind()?

我找的关于setsockopt的资料:
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用
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));
Note:1.在设置了逗留延时,用于一个非阻塞的socket是作用不大的,最好不用;
     2.如果想要程序不经历SO_LINGER需要设置SO_DONTLINGER,或者设置l_onoff=0;

10.还一个用的比较少的是在SDI或者是Dialog的程序中,可以记录socket的调试信息:
(前不久做过这个函数的测试,调式信息可以保存,包括socket建立时候的参数,采用的
具体协议,以及出错的代码都可以记录下来)
BOOL bDebug=TRUE;
setsockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&bDebug,sizeof(BOOL));



获取客户端的ip和端口方法:
SOCKADDR_IN sin;
int len=sizeof(sin);
char ip[16];

int port;
getpeername(s,(sockaddr*)&sin,&len);  //
通过SOCKET获取远程SOCKET地址与端口的方法。
getsockname(s,(sockaddr*)&sin,&len);  //通过SOCKET获取本地SOCKET地址与端口的方法。
strcpy(ip,inet_ntoa(sin.sin_addr));//获取ip

port=sin.sin_port;  //获取端口


原文:

飞鸽源码分析之socket bind

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

相关推荐

Sentinel--哨兵系列数据下载地址及流程更新【202310】

哨兵系列数据下载地址及流程更新。哨兵系列卫星作为哥白尼计划的一部分,主要目标便是对地球的观测任务。哥白尼计划由三部分组成:空间部分(哨兵系列太空任务与其他太空机构任务)、测量部分(提供海洋、大陆表面和大气信息的陆基和机载数据收集网络)、数据管理与全球共享。

twg666的博客 3万+

setsocketopt()函数功能介绍

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

qq_2501341465的博客 5917

大模型训练和推理

大模型训练moe是指混合专家(Mixture-of-experts,简称MoE)的,这是一种用于提高大型神经网络性能的技术,它可以将模型的一部分替换为多个专家,每个专家只负责处理一部分输入数据,从而增加模型的参数量和表达能力,同时减少计算量和训练时间。指令可以作为模型的输入的一部分,也可以作为模型的输出的一部分,具体取决于任务的类型。上下文扩展技术的,这是一种用于提高大型语言模型(LLM)对长文本的处理能力的技术,它可以让模型在不增加参数量的情况下,扩展其注意力范围,从而提高模型的语言理解和生成能力。

weixin_45325331的博客 6019

setsockopt

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

心中天堂的专栏 4006

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

高效网络流量回放:使用tcpreplay实现多目标IP的pcap重放

本文详细介绍了如何使用tcpreplay工具高效回放网络流量pcap文件,并实现多目标IP发送。通过tcprewrite编辑报文和并行回放策略,可满足安全测试、负载测试等场景需求。文章涵盖安装、基础回放、核心技巧及性能优化,帮助读者构建真实流量压力测试环境。

weixin_29297127的博客 479

Windows网络编程经验小结

1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如

1996

CS1237卡尔曼滤波实战:如何用24位ADC实现电子秤级精度?

本文详细介绍了如何利用CS1237 24位ADC芯片结合卡尔曼滤波算法实现电子秤级精度测量。通过解析CS1237硬件特性、卡尔曼滤波原理及STM32驱动优化,提供了一套完整的解决方案,包括多通道支持、驱动代码实现和性能调优技巧,适用于工业测量和嵌入式开发领域。

linux的博客 1087

飞鸽传书源码分析三-网络

http://blog.youkuaiyun.com/mxway/article/details/44195099 本文是在飞鸽传书2.06源码基础之上进行分析的。 一、网络的初始化       飞鸽传书主窗口对应的类TMainWin的构造函数中有如下的代码 [cpp] view plaincopy cfg = new Cfg(nicAddr, portNo = _p

whatnamecaniuse的专栏 935

VT-Refine:基于仿真微调的视觉-触觉反馈双臂装配强化学习

本研究提出VT-Refine框架,通过融合真实世界示范、高保真触觉仿真与强化学习,解决高精度双臂装配任务。方法分为两阶段:首先利用少量人类示范数据预训练视觉-触觉扩散策略;随后在数字孪生仿真环境中进行强化学习微调。关键创新包括:开发GPU加速的触觉仿真模块精确模拟压阻式传感器;采用基于点云的多模态表征实现无缝的跨领域迁移。实验表明,该方法在五个双臂装配任务中显著提升性能,触觉反馈使成功率提高40%。研究首次实现仿真环境中的大规模双臂视觉-触觉强化学习及sim-to-real迁移,为接触密集型任务提供了新解决

2506_90492529的博客 1795

深入解析 OpenClaw(小龙虾)源码:架构设计与核心实现

OpenClaw用清晰、工程化的代码结构,将复杂的Agent交互流程变成了可管理、可扩展的流水线。无论是想深入了解Agent系统设计,还是希望二次开发定制自己的AI助理,阅读OpenClaw源码都是一次绝佳的学习旅程。希望本文能帮助你快速掌握OpenClaw的核心脉络。如果你对某个模块(如技能开发、安全机制)感兴趣,欢迎继续探讨。本文基于OpenClaw社区版本源码分析,具体实现可能随版本迭代有所调整,请以最新源码为准。

Ven%的博客 449

飞鸽源码分析之一——MsgMng::WSockInit

 BOOL MsgMng::WSockInit(BOOL recv_flg){ WSADATA wsaData; if (::WSAStartup(0x0101, &wsaData) != 0) return GetSockErrorMsg("WSAStart()"), FALSE; if ((udp_sd = ::socket(AF_INET, SOCK_DGRAM,

Terry关注智能硬件创业 1964

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

socket选项_总结

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

nature_XD的专栏 1098

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

setsocketopt()

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

weixin_30564785的博客 389

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

服务器开发——setsockopt函数

*** level:选项所在的协议层。例如,SOL_SOCKET 表示套接字层,IPPROTO_TCP 或 IPPROTO_IP 表示 TCP 或 IP 层。* optname:要设置的选项的名称。每个协议层都定义了自己的一组选项。* optval:指向一个变量的指针,该变量包含选项的新值。这个变量的类型取决于 optname 的值。* @return 成功(0);

qq_45595546的博客 1255

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Qt Socket多线程绑定解绑,QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

问题描述: 项目上需要实现一个功能,利用UI界面点击实现Qt UdpSocket解除绑定和重新绑定的功能。由于Udp接收数据之后要执行复杂的计算逻辑,为了避免阻塞UI界面,需要在子线程执行UDP数据的接收和处理工作。然而,在UI界面所在的线程调用udpsocket->abort();会出现下面问题: QSocketNotifier: Socket notifiers cannot be en...

weixin_43820764的博客 8369

套接字选项和I/O控制命令

<br />   套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。<br />   下面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocket和WSAIoctl。每个函数都有大量命令。这些I/O控制命令和选项大多定义在Winsock.h或Winsock2.h内,具体取决于它们到底从属于Winsock

jackfirst86的专栏 943

socket选项总结(setsocketopt)

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

weixin_43841155的博客 920

Java网络编程(八)—— 组播和MulticastSocket

Java网络编程(八)—— 组播和MulticastSocket 文章目录Java网络编程(八)—— 组播和MulticastSocket什么是组播MulticastSocket类总述构造方法与组播组通信设置和获取 MulticastSocket 属性MuliticastSocket示例MuliticastSocket 接收方MuliticastSocket 发送方 什么是组播 网络数据传播按照接收者的数量,可分为以下3种方式。 单播:提供点对点的通信。发送者每次发送的数据有着唯一的目的地址,只被一个接收

lizefeng1998的博客 4675

关于setsocketopt函数

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

点不着的烟屁 1373

移动端输入法个性化学习功能开发实战:从本地ML到隐私保护

自然语言处理(NLP)作为人工智能的核心分支,其核心原理是让计算机理解、解释和生成人类语言。通过词法分析、句法分析和语义理解等技术,NLP模型能够从文本数据中提取有价值的信息。在移动应用开发领域,这项技术的价值在于能够实现高度个性化的用户体验,例如智能输入预测和上下文感知推荐。本地机器学习(On-Device ML)是实现这一目标的关键技术,它允许模型在用户设备端直接进行训练和推断,无需将敏感数据上传至云端,从而在提升功能智能化的同时,严格保障用户数据隐私。这种技术组合的典型应用场景包括输入法的个性化词库学

weixin_33898233的博客 527

setsocket函数,<设置组播属性>

具体的实现函数是:lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen)源码位置\lwip\lwip-stack\src\api\sockets.c中,lwip的setsocket函数可以设置很多属性,

baowxz的专栏 1096

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
上一篇: 就准备出门去了的即时通讯
下一篇: 飞鸽传书如何在VMware下进行通信
普通网友
博客等级 码龄22年 1万+粉丝 2784原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值