linux connect 阻塞超时时间,在linux下玩转带有超时时间的connect函数

在之前的文章中,我们在Windows下玩过带有超时时间的,本文我们在linux下来玩。在某次面试中,还被遇到了这个问题,有意思。

直接上客户端代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[]) // 注意输入参数, 带上ip和port

{

int sockClient = socket(AF_INET, SOCK_STREAM, 0);

struct sockaddr_in addrSrv;

addrSrv.sin_addr.s_addr = inet_addr(argv[1]);

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(atoi(argv[2]));

fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0)|O_NONBLOCK);

int iRet = connect(sockClient, ( const struct sockaddr *)&addrSrv, sizeof(struct sockaddr_in));

printf("connect iRet is %d, errmsg:%s\n", iRet, strerror(errno)); // 返回-1不一定是异常

if (iRet != 0)

{

if(errno != EINPROGRESS)

{

printf("connect error:%s\n", strerror(errno));

}

else

{

struct timeval tm = {5, 0};

fd_set wset, rset;

FD_ZERO(&wset);

FD_ZERO(&rset);

FD_SET(sockClient, &wset);

FD_SET(sockClient, &rset);

int time1 = time(NULL);

int n = select(sockClient + 1, &rset, &wset, NULL, &tm);

int time2 = time(NULL);

printf("time gap is %d\n", time2 - time1);

if(n < 0)

{

printf("select error, n is %d\n", n);

}

else if(n == 0)

{

printf("connect time out\n");

}

else if (n == 1)

{

if(FD_ISSET(sockClient, &wset))

{

printf("connect ok!\n");

fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0) & ~O_NONBLOCK);

}

else

{

printf("unknow error:%s\n", strerror(errno));

}

}

else

{

printf("oh, not care now, n is %d\n", n);

}

}

}

printf("I am here!\n");

getchar();

close(sockClient);

return 0;

}

服务端代码,我们已经写过多次,本文就不写了。

经测试,上述程序OK, 用tcpdump抓包,还能学到不少东西,比如SYN包重传,RST包等。有点意思。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

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

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

相关文章

【渝粤教育】国家开放大学2018年秋季 2508T学前儿童语言教育 参考试题

试卷代号&#xff1a;2542 行政组织学 试题 2019年1月 一、单项选择题&#xff08;每小题2分&#xff0c;共10分&#xff0c;每小题只有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1&#xff0e;组织内若干成员由于相互接触、感情交流、情趣相近、利害…

lambdas for_Java 8发布了! — Lambdas教程

lambdas for为了庆祝几分钟前发布的Java 8的发布&#xff0c;我正在发布Java 8 Lambdas教程的草稿版本。 这是学习Streams API的一种很好的可视化方式&#xff0c;从第一天开始&#xff0c;它将帮助您开始在自己的应用程序中使用lambda。本文计划在下一期Java Magazine发行中发…

为什么工业交换机需要CE认证

工业交换机的使用越来越广&#xff0c;不管是我们国内的市场还是国外的市场&#xff0c;都大量的存在着&#xff0c;也成为国际之间的贸易&#xff0c;在出口到国外的工业交换机&#xff0c;在进入到国外时交换机是必须要有CE认证标记的&#xff0c;它是进入到市场上最低标准。…

lora技术在无线抄表行业应用

随着社会不断的发展&#xff0c;几乎家家户户都已经安装了家庭用电&#xff0c;但是大量的用户也造成了管理不便的麻烦&#xff0c;传统的抄表方式往往需要投入大量的人工和时间成本&#xff0c;所以现在急需一种自动化、方便、简单的抄表方式。 传统的人工抄表方式不但效率低下…

【渝粤教育】国家开放大学2018年秋季 2726T畜禽生产概论 参考试题

试卷代号&#xff1a;2746 农科化学基础知识 试题&#xff08;开卷&#xff09; 2019年1月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考…

linux执行脚本n,Linux执行sh脚本空白

笔者在初步研究了Windows的SYSTEM.INI后发现&#xff0c;通过VB的多媒体控件MCI.VBX可以打开MPEG压缩文件(如VCD2.0版的.DAT文件)"Err.ClearEndIfNext取得当前Windows序列号函数FunctionGetWindowsSN()ConstHKEY_LOCAL_MACHINE&H80000002strKeyPath"SOFTWARE\Mic…

这四种攻击单片机的主要技术你了解多少?

本文来自 成都亿佰特  为了防止未经授权访问或拷贝单片机的机内程序&#xff0c;大部分单片机都带有加密锁定位或者加密字节&#xff0c;以保护片内程序。如果在编程时加密锁定位被使能&#xff08;锁定&#xff09;&#xff0c;就无法用普通编程器直接读取单片机内的程序&am…

【渝粤教育】国家开放大学2018年秋季 3781-22T燃气燃烧技术与设备 参考试题

试卷代号&#xff1a;3895 管理英语1 试题 2019年1月 注 意 事 项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场…

以太网交换机的概念,网络接口和主要特点

以太网交换机这个名词相信很多人都听过吧&#xff0c;那么大家知道什么是以太网交换机吗&#xff1f;关于以太网交换机大家又知道多少呢&#xff0c;接下来就由飞畅科技的小编来给大家详细介绍一下以太网交换机的基本概念以及网络接口方式和主要特点&#xff0c;一起来看看吧。…

将旧对象装箱可自动关闭

从Java 7开始&#xff0c;我们可以使用try-with-resources并自动关闭任何实现Autocloseable接口的对象。 如果资源是 Autocloseable 。 一些类需要一些总结&#xff0c;但不是Autocloseable 。 这些主要是某些遗留框架中的旧类&#xff0c;仍然妨碍我们前进。 没有人再使用Stru…

【渝粤教育】国家开放大学2018年秋季 7404-22T数学建模 参考试题

编号&#xff1a;8044 座位号 2018&#xff5e;2019学年度第1学期期末考试 植物病虫害防治基础试题 2019年 1月 一、名词解释 &#xff08;5小题&#xff0c;每题5分&#xff0c;共25分&#xff09; 非传染性病害 抗病性 物理机械防治 植物检疫 年生活史 二、单项选择题…

六种常用的物联网通信协议

本文来自&#xff1a;http://www.ebyte.com/ 随着现在物联网设备的数量不断的增加&#xff0c;这些设备之间的通信连接也成了一个值得我们思考的课题。据预测&#xff0c;到2020年物联网的设备数量将达到204亿台。我们常用的物联网通信协议有很多种&#xff0c;它们具备着不同…

linux 怎么添加path环境变量,Linux下怎么添加和查看PATH环境变量

linux下查看和添加PATH环境变量来自&#xff1a;http://apps.hi.baidu.com/share/detail/32942984$PATH&#xff1a;决定了shell将到哪些目录中寻找命令或程序&#xff0c;PATH的值是一系列目录&#xff0c;当您运行一个程序时&#xff0c;Linux在这些目录下进行搜寻编译链接。…

【渝粤教育】国家开放大学2018年秋季 8669-21T (1)政治经济学 参考试题

试卷代号&#xff1a;0007 座位号 2018——2019学年度第一学期期末考试 文 书 档 案 管 理 试 题 2019年1月 1&#xff0e;公务文书是 的主体。 2&#xff0e;公文的正文部分一般包括 、 、 、附件、 、 、机关印章。 3&#xff0e;按公务文书的性质及其使用范围的不同划分&a…

智能插座常用的两种通信协议——WIFI和ZigBee

随着科技技术的不断发展&#xff0c;智能家居的概念不断的深入人心&#xff0c;人们利用智慧不断开创新的生活。比尔盖茨是第一个智能家居的使用者&#xff0c;也许很多人都会认为智能家居是高端的设备&#xff0c;只有想比尔盖茨那样的有钱人才能够使用&#xff0c;其实不然&a…

以太网交换机坏了,能否用光纤收发器来替代?

近期&#xff0c;有朋友在后台咨询我们&#xff1a;现有的以太网交换机坏了&#xff0c;能否用光纤收发器来替代&#xff1f;相信很多朋友都有过这样的疑问&#xff0c;答案肯定是否&#xff0c;我们不建议大家用光纤收发器替代以太网交换机来使用&#xff01;因为以太网交换机…

javafx canvas_JavaFX技巧1:可调整大小的Canvas

javafx canvas在使用FlexGanttFX时&#xff0c;我不得不处理很多JavaFX Canvas节点。 我正在使用它在时间轴上呈现活动。 甘特图中的每一行都是一个Canvas节点。 用户可以选择单独调整每行的大小。 因此&#xff0c;我不得不找出调整画布大小的最佳方法&#xff0c;这种现成的方…

【渝粤教育】国家开放大学2019年春季 0341-22T高级英语听力(2) 参考试题

试卷代码&#xff1a;0341 2018-2019学年度第二学期期末考试 高级英语听力&#xff08;2&#xff09;试题 2019年7月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸规定栏内。 考试结束后&#xff0c;把试卷和答题纸放…

linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解

linux软件版本管理命令update-alternatives使用详解update-alternatives 命令用于处理linux系统中软件版本的切换&#xff0c;在各个linux发行版中均提供了该命令&#xff0c;命令参数略有区别&#xff0c;但大致是一样的。1、 注册软件以jdk为例&#xff0c;安装了jdk以后&…

物联网技术应用案例

物联网应用的真正价值远远不至于联网小工具和智能冰箱。物联网的不断发展下&#xff0c;物联网应用正在不断的帮公司提高效率&#xff0c;降低成本并推动收入的增长。 但是&#xff0c;虽然您可能会想到很多的比较典型的物联网应用方案&#xff0c;比如常见的工业自动化和农业中…