当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] setsockopt的一些用法:close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(con

 setsockopt的一些用法:

close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:

BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

如果要已经处于连接状态的soket在调用close socket后强制关闭,不经历TIME_WAIT的过程:

BOOL bDontLinger = FALSE; setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));

在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));

在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));

如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响程序的性能:

int nZero=0; setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));

同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):

int nZero=0; setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));

一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性:

BOOL bBroadcast=TRUE; setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL));

在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可以设置connect()延时,直到accept()被呼叫(本函数设置只有在非阻塞的过程中有显著的作用,在阻塞的函数调用中作用不大)

BOOL bConditionalAccept=TRUE; setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL));

如果在发送数据的过程中(send()没有完成,还有数据没发送)而调用了close socket(),以前我们一般采取的措施是"从容关闭"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));

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

毋须依赖实时操作系统(RTOS)的全新低功耗蓝牙开发软件解决方案面世,旨在帮助开发者从传统nRF5 SDK和nRF52系列轻松迁移至新一代nRF54L系列

关键字: 低功耗蓝牙 SoC SDK

Puttshack 的 Trackaball 以 Nordic nRF54L15 系统级芯片 (SoC) 监控传感器并实现低功耗蓝牙连接,并以nPM2100 电源管理集成电路(PMIC)节省耗电

关键字: SoC 传感器 集成电路

2025年8月21日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 即日起开售Silicon Labs全新xG26系列无线SoC和MCU。xG26片上系统...

关键字: SoC 微控制器 物联网

3系列Secure Vault在第三代无线开发平台产品组合中的SiXG301 SoC上首次亮相,获得了先进物联网保护的最高级别认证

关键字: 物联网 SoC 无线电

基于智能体的新型安全服务通过自主AI智能体降低运营成本,同时加快响应并扩大覆盖范围 2025年,7AI平台已为各安全团队节省22.4万个分析师工时——相当于约112位分析师全年工作量,价值1120万美元 拉斯维加斯2...

关键字: AI 智能体 SoC AGENT

随着高解析度音频应用的不断发展和广泛部署,诸如USB与I2S之间等不同专业接口之间的高品质音频转换需求日益增长,由此带来了实现高性能、高实时性与高灵活性的新挑战。为此,边缘AI和智能音频专家XMOS携手其全球首家增值分销...

关键字: SoC USB 处理器

完全无人化 —— 定义未来金标标准的100%自动化诊断系统 CURECA™ 将于7月28日至31日在芝加哥首次亮相。 实现全球诊断数据的统 —— 设立大数据平台 S...

关键字: GEN 自动化 无人值守 SE

颠覆设计领域的伦敦创新企业与Ceva合作,为Nothing和CMF子品牌音频产品线增强听觉体验,包括最新发布的Nothing Headphone (1)

关键字: 传感器 蓝牙 SoC

nPM1304 PMIC 是对 Nordic 屡获殊荣的 nPM1300 PMIC 的补充,为智能戒指、人体传感器和其他小尺寸电池应用提供了高度集成的超低功耗解决方案和精密电量计

关键字: 电源管理 传感器 SoC

厦门 2025年7月3日 /美通社/ -- 厦门市华师希平双语学校在三年办学历程中取得积极进展,教育教学工作呈现良好态势。 教育教学稳步推进 中考表现:2024年首届中考总均分在全市表现良好;2025届地...

关键字: BSP 人工智能 AI SE
关闭