使用setsockopt()接口,设置TCP的接收与发送超时,Invalid argument错误问题

使用TCP套接字时,当无网络连接时,还会继续send,继续recv阻塞,知道TCP自己协议机制判断断开连接时才会停止发送和接收,时间需要几分钟之久。
解决的办法是,自己设置接收超时时间,当超时后重新发送,或者从新初始化socket然后在重新创建socket重新connect
代码如下:  
     int iSendTimeout, iRecvTimeOut;
       iClientSock = socket(AF_INET, SOCK_STREAM, 0);
       if(iClientSock < 0)
       {
               printf("[%s:%d]client init error\r\n", __FILE__, __LINE__);
               return ERROR;
       }

       iRecvTimeOut = 3000;        
       iRet1 = setsockopt(iClientSock, SOL_SOCKET, SO_RCVTIMEO, &iRecvTimeOut, sizeof(int));
       printf("%s\r\n", strerror(errno));
       iSendTimeout = 3000;        
       iRet2 = setsockopt(iClientSock, SOL_SOCKET, SO_SNDTIMEO, (char *)&iSendTimeout, sizeof(int));
       printf("%s\r\n", strerror(errno));

但是编译会出错,perror显示参数错误(Invalid argument ),看了下内核中的实现,参数确实错了,其中最后一个参数是sizeof(struct timeval) 类型的,而非其他类型
改正为:
struct timeval tv;    //声明一个 struct timeval 类型的变量
然后最后个参数写为:
iRet2=setsockopt(iClientSock, SOL_SOCKET, SO_SNDTIMEO, &iSendTimeout, sizeof(tv));

参数解析:
 int setsockopt(int s, int level, int optname,const void *optval, socklen_t optlen);
1)int s :sockfd,即socket文件描述符
2)int level : SOL_SOCKET(通用套接字) ,IPPROTO_TCP,等
3) int optname  :SO_SNDTIMEO(发送超时时间)|SO_RSVTIMEO(接收超时时间)等,设置选项,
4) const void *optval :自定义的超时时间的地址
5) struct timeval的大小,即sizeof(struct timecal)

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

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

相关文章

关于SpringCloud、SpringBoot 希望这是说得最详细的

几年前&#xff0c;没几个jar冲突一下都不叫搭框架 —— java面试必修 什么是Spring Boot 用我的话来理解&#xff0c;Spring Boot就是整合了框架的框架&#xff0c;它让一切依赖都变得有序简单&#xff0c;你不用操心A.jar是什么版本&#xff0c;又依赖哪些版本的jar&#xff…

weui-switch开关控件,表单提交后如何取值

最近在学习weui这个框架&#xff0c;做了一些小的试验&#xff0c;发现weui-switch控件直接提交不能获取到表单信息&#xff0c;在segmentfault上发现也有人提了这个问题&#xff0c;有人说可以设置一个隐含标签来捕获开关的状态&#xff0c;试了一下&#xff0c;确实可以&…

麦克风设计指导与选型参考

随着语音识别技术的成熟&#xff0c;智能音箱类产品的火爆&#xff0c;越来越多的产品可以升级为语音交互产品&#xff1b; 下面简单介绍下此类产品的语音前端--麦克风阵列设计相关注意事项&#xff1a; 线性四麦阵列构型&#xff1a;如上图所示&#xff0c;麦克风直线等距摆…

[BZOJ1419] Red is good(期望DP)

传送门 逆推 只不过顺序还是顺着的&#xff0c;思想是逆着的 f[i][j]表示还剩下i张红牌&#xff0c;j张黑牌的期望值 那么边界是 f[i][0]i&#xff0c;因为只剩i张红牌 f[0][j]0&#xff0c;只剩黑牌&#xff0c;显然直接停止最优 f[i][j] max(0,i/(ij)*f[i-1][j]j/(ij)*f[i][…

Linux下高性能网络编程中的几个TCP/IP选项_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE

最近在新的平台上测试程序&#xff0c;以前一些没有注意到的问题都成为了性能瓶颈&#xff0c;通过设置一些TCP/IP选项能够解决一部分问题&#xff0c;当然根本的解决方法是重构代码&#xff0c;重新设计服务器框架。先列出几个TCP/IP选项&#xff1a; 选项 man 7 socket: SO_R…

云计算在未来一定是不可或缺的

2019独角兽企业重金招聘Python工程师标准>>> 在2018京东云合作伙伴大会上&#xff0c;京东云总裁申元庆表示&#xff0c;技术发展的大趋势是“分久必合&#xff0c;合久必分”循环往复的波动&#xff0c;近十年来云计算的发展将算力、存储、带宽全部集中在中央部分&…

智能音箱 之 音频通路质量--测试与参数

一、概述 当将语音识别算法接入到设备时&#xff0c;务必要保证设备的音频通路具有足够的质量。因此对设备进行音频测试&#xff0c;以评估能够影响语音识别性能的音频前端的音频参数。如下要点对语音识别至关重要&#xff1a; 自然声音合适的增益良好的信噪比一致的响应&…

关于Linux路由表的route命令

转自&#xff1a;http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 查看 Linux 内核路由表 使用下面的 route 命令可以查看 Linux 内核路由表。 # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * …

Python学习 - 常用模块(二)

目录 一. 常用模块 - hashlib 二. 常用模块 - hmac 三. 常用模块 - logging 四. 常用模块 - re 五. 常用模块 - requests 六. 常用模块 - paramiko 一. 常用模块 - hashlib hash: 一种算法, 3.x里代替了md5模块和sha模块, 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 …

select函数分析

Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序&#xff08;所谓阻塞方式block&#xff0c;顾名思义&#xff0c;就是进程或是线程执行到这些…

UART介绍

1. 概述 UART, Universal Asynchronous Receiver-Transmitter, 通用异步收发器&#xff1b; 串口&#xff1a;在嵌入式里指的是UART口&#xff0c;常用TTL电平即3.3V或者5.0V&#xff1b; COM口&#xff1a;在台式机上常用的口&#xff0c;DB9那种接口&#xff0c;接口协议只…

mongodb环境安装

1、mongodb安装 我采用的是离线安装&#xff0c; &#xff08;1&#xff09;在mongodb的官方网址下载所需要的版本。我下载的是 mongodb-linux-x86_64-ubuntu1604-3.4.5.tgz 。 &#xff08;2&#xff09;下载后解压缩到待安装目录&#xff0c;我这里下载在了Downloads目录…

rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计

非集群下&#xff0c;简单的说&#xff1a;- 如果是excl&#xff0c;则设置durability没有意义&#xff0c;因为不管服务器挂了还是客户端主动/被动断开了&#xff0c;队列都会自动删除。- auto-delete&#xff0c;其实可简单的认为是同理&#xff0c;即使非excl&#xff0c;则…

IIC 总线接口详细介绍

1. 概述 IIC Inter Integrated-Circuit 总线是PHLIPS公司推出的一种串行总线&#xff0c;是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线&#xff0c;它支持多主控(multimastering)&#xff0c;其中任何能够进行发送和接收的设备都可以成为主总线。…

DMA数据传输过程

DMA方式具有如下特点&#xff1a;1、 外部设备的输入输出请求直接发给主储存器。主存储器既可以被CPU访问&#xff0c;也可以被外围设备访问。因此&#xff0c;在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队&#xff0c;一般计算机系统把外围设备的访问…

Android JNI开发系列(二)HelloWorld

2019独角兽企业重金招聘Python工程师标准>>> 入门HelloWorld 新建项目 Configure your new project部分选中 Include C Support 复选框 Next 正常填写所有其他字段并完成向导接下来几个部分 在向导的Customize C Support 部分&#xff0c;您可以使用谢列选项自定…

sublime text3安装js提示的插件

今天安装Sublime Text3的js插件&#xff0c;在网上查了很多资料&#xff0c;为了方便以后看&#xff0c;写一个安装插件的总结和方法。 要安装js相关的插件&#xff0c;就要先安装一个Package Control&#xff08;插件管理器&#xff09;的插件&#xff0c;通过这个插件再去安装…

SPI接口详细介绍

1. 概述 SPI Serial Peripheral Interface&#xff0c;是串行外围设备接口&#xff0c;是一种高速&#xff0c;全双工&#xff0c;同步的通信总线。常规只占用四根线&#xff0c;节约了芯片管脚&#xff0c;PCB的布局省空间。现在越来越多的芯片集成了这种通信协议&#xff0…

驻扎博客园

今天把之前hexo里的一些文章全部转移到博客园了&#xff0c;之后就在博客园写点东西&#xff0c;记录一些生活的琐事。为什么要移至博客园呢&#xff1f;其实很简单&#xff0c;这边可以和一些同意从事前端的小伙伴一起互动。技术还是需要多讨论的&#xff0c;希望之后能多更新…

H.264 Profile、Level、Encoder三张简图

H.264有四种画质级别,分别是BP、EP、MP、HP&#xff1a; 1、BP-Baseline Profile&#xff1a;基本画质。支持I/P 帧&#xff0c;只支持无交错&#xff08;Progressive&#xff09;和CAVLC&#xff1b;   2、EP-Extended profile&#xff1a;进阶画质。支持I/P/B/SP/SI 帧&…