Socket中如何设置连接超时 | |
|---|---|
| 2004-05-27 antghazi | |
| 设置connect的超时很简单,优快云上也有人提到过使用select,但却没有一个令人满意与完整的答案。偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被锁定的应用程序,采取一种有序的方式,同时对多个套接字进行管理"(《Windows网络编程技术》原话)。使用方法与解释请见《Windows网络编程技术》。 在使用此函数前,需先将socket设置为非锁定模式,这样,在connect时,才会立马跳过,同时,通常也会产生一个WSAEWOULDBLOCK错误,这个错误没关系。再执行select则是真正的超时。 WSADATA wsd; SOCKET cClient; int ret; struct sockaddr_in server; hostent *host=NULL; if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;} cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(cClient==INVALID_SOCKET){return 0;} //set Recv and Send time out int TimeOut=6000; //设置发送超时6秒 if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){ return 0; } TimeOut=6000;//设置接收超时6秒 if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){ return 0; } //设置非阻塞方式连接 unsigned long ul = 1; ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul); if(ret==SOCKET_ERROR)return 0; //连接 server.sin_family = AF_INET; server.sin_port = htons(25); server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp); if(server.sin_addr.s_addr == INADDR_NONE){return 0;} connect(cClient,(const struct sockaddr *)&server,sizeof(server)); //select 模型,即设置超时 struct timeval timeout ; fd_set r; FD_ZERO(&r); FD_SET(cClient, &r); timeout.tv_sec = 15; //连接超时15秒 timeout.tv_usec =0; ret = select(0, 0, &r, 0, &timeout); if ( ret <= 0 ) { ::closesocket(cClient); return 0; } //一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式 unsigned long ul1= 0 ; ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1); if(ret==SOCKET_ERROR){ ::closesocket (cClient); return 0; } | |
相关推荐
QT实现Word读写
在windows环境下,我们可以通过ActiveQt实现Office自动化,相当于VB的VBA功能。 以下是一个实例: #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); //显示的打开一个word应用程序 QAxW
tcp/udp socket 网络通信中超时时间的设置
1.connect函数的超时时间设置只对TCP有效 UDP由于是无连接的connect都会返回success。实测发现 这个值是从0开始的 TCP_SYNCNT 值为2 那么 就是超时时间就是1+2+4 = 7秒。第二种是 默认其为阻塞模式 通过setsockopt 函数设置TCP_SYNCNT 值 头文件如下。表示失败是tcp重连的次数 每次重连时间会翻倍 依次是 1 2 4 8 16 32 64 ....如果是3 就是1+2+4+8 = 15秒。
5分钟搞定!用ZLMediaKit搭建GB28181视频监控系统(含避坑指南)
本文提供了一份基于ZLMediaKit搭建GB28181视频监控系统的实战指南。文章详细介绍了从环境准备、核心组件(ZLMediaKit与SIP服务器)部署、摄像头配置到内外网穿透的完整流程,并重点分享了设备ID配置、防火墙设置等关键避坑经验,帮助开发者快速构建稳定可控的监控平台。
socket超时设置详解(connect/read/write)
一.基本概念(摘自:《unix网络编程卷1》14.2 套接字超时) 在涉及套接字的I/O操作上设置超时的方法有以下三种 (1)调用alarm,它在指定超时期满时产生SIGALARM。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。 (2)在select中阻塞等待I/O(select有内置的时间限制),以此替代直接阻塞在read或write调用上
解锁笔记智能对话:手把手配置 Obsidian Copilot 插件与硅基流动模型
本文详细介绍了如何为Obsidian笔记软件配置Copilot插件,并接入硅基流动AI模型,从而为个人知识库添加智能对话能力。通过手把手教程,指导用户完成插件安装、API Key获取、模型配置及索引构建,最终实现基于个人笔记内容的深度语义问答,提升知识管理效率。
uniapp 基于单选框多选框实现上拉触底多选/单选、回显
showPickerCheckbox弹层显示 label和value 类似下拉框的label和value一个意思 键和值。结果:可以传接口(接口只能post请求) 可以搜索 下面是结果图片展示 单选多选都可以。fieldValue回显传的值 传的是字符串 数组的话[1,2]转为1,2格式传入。mode是控制的单选还是多选 true为多选默认值 其余参数 单选多选一样。fieldName字段名 确定后会返回该字段名 根据字段名找对应的传入值。问题:在uniapp上 实现分页多选的操作。下面是组件的完整代码。
(P16)socket编程(十一):套接字I/O超时设置方法,用select实现超时
文章目录1.套接字I/O超时设置方法2.用select实现超时 1.套接字I/O超时设置方法 2.用select实现超时 在都之前设置一个闹钟,若5s钟内没有返回数据(到达5s钟),则会产生一个SIGALRM信号将read打断 错误码被打断了 因为该闹钟可能会被其它使用,所以一般不使用闹钟来实现超时 发送超时时间 接收超时时间 超时的错误码是EWOULDBLOCK 不好移植,因为一些TCP选项不支持这两个选项 19:51 ...
5分钟搞定!用OpenCV实现全景图像柱面展开的保姆级教程(附完整代码)
本文提供了一份使用OpenCV实现全景图像柱面展开的详细教程。通过清晰的数学原理讲解和分步代码演示,指导读者快速掌握从等距柱状投影全景图到平面展开图的核心转换方法,并涵盖性能优化、参数调整及透视视图扩展等实用技巧,适合图像处理爱好者和开发者实践。
【计算机网络】Socket的SO_TIMEOUT与连接超时时间
SO_TIMEOUT选项是Socket的一个选项,用于设置读取数据的超时时间。它指定了在读取数据时等待的最长时间,如果在指定的时间内没有数据可读取,将抛出SocketTimeoutException异常。
Python语言基本语法元素
Python语言的基本语法元素:包括Python程序的格式框架,语法元素名称,数据类型和语句元素以及基本的输入输出函数。
【华为OD】华为性格测试(综合测试)高分策略
1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。
linux socket 设置连接超时的方法
1.alarm方法 http://hi.baidu.com/ppln/blog/item/0523d3090731689d0a7b8200.html #include #include #include #include #include #include #include #include #include #define PORT 1234 #define MAXD
数字电视中的 Closed Caption (CC) 字幕标准协议
本文将详细介绍 DVB中的 CC 字幕标准协议,包括数据结构格式、字段定义、字段占用比特数以及字段用途。此外,本文还将举例说明如何从 TS 传输流中解析 CC 字幕信息,并组织打包到电视节目中进行显示。
如何设置socket通信的连接超时
在建立socket连接时可以很容易设置socket通信的发送和接收超时时间,但是在建立socket通信时,如果是Win98系统,则如果连接失败,则程序会一直等待在哪里,Windows2000默认超时时间是30秒,当然,这个超时时间不算长,但是加入我们要循环扫描一系列端口并且建立连接的话,总的等待时间就会让人忍受不了,下面就以delphi为例进行说明,如何在建立socket的时候设置其超时时间:
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
C# Socket连接超时设置
问题描述: 对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验 问题解决: Socket服务器端: Socket客户端: IAsyncResult.AsyncState 返回一个对象,该对象时启动异步操作的方法的最后一个参数 注: 在Socket客户端进行超时连...
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
java socket连接超时_Java中Socket设置连接超时的代码
Java中Socket设置连接超时的代码大家都知道Java的Socket如果连接不到指定IP和Port的主机,就会抛出IOException异常,而通常情况下,从连接到出现IOException会有一段不定的时长,就是所谓的超时时长,如果超时时长过长,在开发时会影响测试,如果代码成了产品,又会非常的影响用户体验,那么要怎么设置这个时长呢?今天百分网小编为大家整理的Java中Socket设置连接超时...
如何设置socket的连接超时
把优快云与中文yahoo翻了底朝天,也没找到如何设置socket的连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时。 设置connect的超时很简单,优快云上也有人提到过使用select,但却没有一个令人满意与完整的答案。偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程
Socket 关于设置Socket连接超时时间
参考链接: https://www.iteye.com/blog/cuisuqiang-1725348 socket的读写是阻塞的,soTimeout是socket读写超时,而不是链接超时。 setSoTimeout public void setSoTimeout(int timeout) throws SocketException启用/禁用带有指定超时值的 SO_TIMEOU...
java socket超时_Socket 关于设置Socket连接超时时间
做网络编程的人对setSoTimeout方法一定很熟悉,都知道是设置连接的超时时间!但是我在网上找资料时发现很多人把这个超时时间理解成了链路的超时时间!我看了一下JDK 关于这个方法的说明,其实根本不是链路的超时时间!setSoTimeoutpublic void setSoTimeout(int timeout)throws SocketException启用/禁用带有指定超时值的 SO_TIM...
java设置连接超时_Java中Socket设置连接超时的代码分享
前言大家都知道Java的Socket如果连接不到指定IP和Port的主机,就会抛出IOException异常,而通常情况下,从连接到出现IOException会有一段不定的时长,就是所谓的超时时长,如果超时时长过长,在开发时会影响测试,如果代码成了产品,又会非常的影响用户体验,那么要怎么设置这个时长呢?下面来一起看看详细的介绍:Socket的类提供了一个方法:public void connect...
linux socket默认超时时间设置,Socket中如何设置连接超时 (转)
Socket中如何设置连接超时 (转)Socket中如何设置连接超时AntGhazi/2001.12.14 主页:antghazi.yeah把优快云与中文翻了底朝天,也没找到如何设置socket的连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时。设置connect的超时很简单,优快云上也有人提到过使用,但却没有一个令人满意与完整的答案...
Linux设置socket连接超时
Linux设置socket连接超时(异步连接) 转载▼ 标签: linux socket connect 超时 it 分类: Linux & C 1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数 2.调用connect,正常情况下,因
1万+



被折叠的 条评论
为什么被折叠?



