问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux摄像头怎样解决阻塞超时问题

发布网友 发布时间:2023-01-15 07:10

我来回答

1个回答

热心网友 时间:2023-08-16 06:35

同事今天问我,如何在linux下的c代码里面控制connect的阻塞时间。应用的背景是:linux下的c程序有两个目标IP需要connect,如果用阻塞方式,当其中一个IP不能连接的情况下,程序将阻塞在connect函数上。
本来以为用setsockopt修改个什么参数就可以搞定,结果了半天也没有结果。倒是在网上搜到很多这样的解决方案:将connect方式设置为非阻塞方式,这样程序一旦执行就会马上返回,但问题是,到底有没有连接上呢,你需要等待一段时间,然后使用函数判断连接是否正常。试了下,貌似由于系统的区别,这个方法在我的linux环境下不适用,主要是后面判断是否连接上的函数不行,不管连接上或没连接上都返回一个值。
看来网上的方法也不能尽信,最后在公司前人的一段代码里面找到了解决方法,这里分享下:

sigset(SIGALRM, u_alarm_handler);

alarm(2);

code = connect(socket_fd, (struct sockaddr*)&socket_st, sizeof(struct sockaddr_in));

alarm(0);

sigrelse(SIGALRM);
首先定义一个中断信号处理函数u_alarm_handler,用于超时后的报警处理,然后定义一个2秒的定时器,执行connect,当系统connect成功,则系统正常执行下去;如果connect不成功阻塞在这里,则超过定义的2秒后,系统会产生一个信号,触发执行u_alarm_handler函数, 当执行完u_alarm_handler后,程序将继续从connect的下面一行执行下去。
其中,处理函数可以如下定义,也可以加入更多的错误处理。

void u_alarm_handler()
{
}
这个方法相对网上的做法而言代码量小,更精巧,看来老代码也是有很多值得学习的地方。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 我的专业是国际经济与贸易,毕业论文的题目是安徽加工贸易的现状与前景 黑眼圈怎么去掉最快? 淘宝装修市场购买后过期能不能保存图片自己用 只用保鲜膜裹住腰会有减肥的效果吗? 梦见鬼魂追我 梦见自己和鬼怪成了朋友 红米手机屏幕锁被锁怎么解 我的红米手机屏幕锁了,请问怎么解锁。 剪映文字怎么不超出抖音页面 2020《淘宝》双12欢乐造红包玩法攻略 2020《淘宝》双12欢乐造红包欢乐币获取攻略 怎么把googleppt单位slide移到ppt里 Slide支持WPS么 求 我的小妹.mp3 百度云资源下载 《小妹》txt全集下载 为什么刺激战场外服充不了钱,还带了一串英文,我的是最新华为手机,怎么搞。 生于忧患死于安乐拼音版原文 宁夏北京旅游5天4晚线路找哪家 从银川自驾车到北京全程高速,应该怎么走,请有过这样经历的朋友指点路线,谢谢! 微信版通过二唯码扫描登陆。然后退出。怎样能知道密码 全面从严治党有哪些重要意义? 全面从严治党有什么重大意义? 全面从严治党有何现实意义 腾讯会员考试后置摄像头会不会录屏 怎么屏蔽微博推广广告 黄鹤楼 / 登黄鹤楼原文_翻译及赏析 佳人彩云里,欲赠隔远天。原文_翻译及赏析 《杜甫诗选 玉台观》(杜甫)全诗翻译赏析 女生叫你直男说明什么 被女生说直男是好是坏 58房源过期怎么办 已申报房源怎么删除 女生叫你直男说明什么,女生说你直男可能是因为这个 “96”谁能告诉我什么意思? 96后是什么意思 工行微信信用卡白卡怎么用 请问hhc中间继电器中的hhc代表什么意思? 新车试驾应该注意事项新车试驾应该注意什么 朝花夕拾的书名意思? 八股取士是什么朝代的 八股取士是哪个朝代的 刘义庆是什么朝代的 刘义庆是哪个朝代的