C++socket编程(六):6.2 通过select实现超时处理
完成了socket编程的阻塞与非阻塞,接下俩就要处理前面讲过的关于超时处理的内容了。
select函数我们可以看下接口手册
如下代码:
FD_ZERO(&set); //文件句柄置空FD_SET(sock, &set); //把这个sock加入到这个文件句柄当中timeval tm;tm.tv_sec = 0;tm.tv_usec = timeoutms * 1000;if (select(sock + 1, 0, &set, 0, &tm) <= 0) //监听这个文件序列是否有可读可写{printf("connect %s:%d failed:%s\n", ip, port, strerror(errno));printf("connect timeout or error!\n");return false;}
概述:
对于一个套接字的读写(read/write)操作默认是阻塞的,如果当前套接字还不可读/写,那么这个操作会一直阻塞下去。可以在进行读写操作的时候可以指定超时值,这样就读写操作就不至于一直阻塞下去。
对于非阻塞的套接字立即返回.超时对于阻塞的套接字更有用.
在涉及套接字的I/O操作上设置超时的方法有三种:
1:调用alarm,它在指定的超时期满时产生SIGALRM信号。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。
2:在select中阻塞等待I/O(select有内置的时间限制),依次代替直接阻塞在read或write调用上。(linux2.6以后的内核也可以使用epoll的epoll_wait)
3:使用较新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项。这个方法的问题在于并非所有的实现都支持这两个套接字选项。
上述这三个技术都适用于输入和输出操作(read、write,及其变体recv/send, readv/writev, recvfrom,sendto)。不过我们也期待可以用于connect的技术,因为TCP内置的connect超时相当长(典型值为75秒),而我们在写服务器程序的时候,也不会希望一个连接的建立需要花费这么长时间。select可用来在connect上设置超时的先决条件是相应的套接字是非阻塞的,而那两个套接字选项对connect并不适用;同时也应当指出,前两个技术适用于任何描述符,而第三个技术仅仅适用于套接字描述符。
这里只是测试了下设置套接字超时这种方式.
C++socket编程(六):6.2 通过select实现超时处理相关推荐
- 深入研究socket编程(3)——使用select函数编写客户端和服务器
http://blog.csdn.net/chenxun_2010/article/details/50488394 首先看原先<UNIX网络编程--并发服务器(TCP)>的代码,服务器代 ...
- linux网络编程之socket编程(六)
经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:"真爱生活,珍惜生命",好了,言归正传. ...
- Socket编程实践(9) --套接字IO超时设置方法
引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) {return ; }signal(SIG ...
- socket 编程篇六之IPO多路复用-select poll epoll
http://blog.csdn.net/woxiaohahaa/article/details/51498951 文章参考自:http://blog.csdn.net/tennysonsky/art ...
- socket编程的select模型
在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的 ...
- SOCKET编程中,select()函数的作用
SOCKET编程中,select()函数的作用Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accep ...
- Socket编程知识必学/SELECT 编程
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...
- Socket编程实践(10) --select的限制与poll的使用
select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n(number)来调整或 ...
- js监听select值变化_网络编程——C++实现socket通信(TCP)高并发之select模式
相关函数: 服务端: socket() bind() listen() FD_ZERO()等辅助函数 select() 高并发select模式 accept() read() 或 recv()等 wr ...
最新文章
- 贝塞尔曲线与CAShapeLayer的关系以及Stroke动画
- Objective-C 编码规范
- bzoj1007题解
- VTK:vtkCubeAxesActor用法实战
- jemter在linux上怎么安装_【JMeter之一】在linux系统下安装jmeter
- 设计灵感|C4D卡通角色设计作品,你想要的模型集设都有
- Django 缓存、序列化、信号
- prometheus linux下载_Prometheus笔记
- 3D开发-AR.js Nginx HTTPS服务搭建
- 重置kubernetes集群
- Nachos project1 领悟
- 【机器学习】机器学习公共数据集整理
- 人脸识别中怎么区分人脸和照片
- 自定义view,仿微信、支付宝密码输入控件的源码实现
- win10 64位注册TeeChart8.ocx
- 如何使用SQL批量替换数据库特定字段中部分特定数据
- Linux Shell脚本:探测同网段主机及对应MAC地址
- (Java)socket网络编程及处理socket粘包拆包问题
- android调用在线天气服务,android通过google api获取天气信息示例
- python pyqt5图片(QPixmap)和opencv图片数据结构相互转换
热门文章
- Android 仿微信朋友圈发表图片拖拽和删除功能
- Sublime Text 2安装汉化破解、插件包安装教程
- Linux的watch命令 -- 实时监测命令的运行结果
- 58 - 算法 -分治问题 - 循环 二分查找 OpenJudge 百练 4143和为给定数
- python变量域名_想尝试使用python进行域名分析,可是没有接触过python,想请教请教。...
- python oop编程_23 Python - 面向对象编程OOP
- 百万数据php7取出循环_用php处理百万级以上的数据
- python 文件下载服务器异常_python 从远程服务器下载日志文件的程序
- sql limit不接具体数字_SQL汇总函数和分组函数
- linux分配端口未抢占端口,Linux命令之awk:基础知识(一)