pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C++ Boost ASIO:如何讀/寫超時(shí)?

C++ Boost ASIO: how to read/write with a timeout?(C++ Boost ASIO:如何讀/寫超時(shí)?)
本文介紹了C++ Boost ASIO:如何讀/寫超時(shí)?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

通過閱讀其他 Stack Overflow 條目和 boost::asio 文檔,我確認(rèn)沒有同步 ASIO 讀/寫調(diào)用也提供易于使用的超時(shí)作為調(diào)用的參數(shù).

From reading other Stack Overflow entries and the boost::asio documentation, I've confirmed that there is no synchronous ASIO read/write calls that also provide an easy-to-use timeout as a parameter to the call.

我正在使用使用超時(shí)的 select(2) 調(diào)用轉(zhuǎn)換老式 Linux 套接字應(yīng)用程序,我需要或多或少地做同樣的事情.

I'm in the middle of converting an old-school Linux socket application with select(2) calls that employs timeouts, and I need to do more-or-less the same.

那么在 boost::asio 中執(zhí)行此操作的最佳方法是什么?查看 asio 文檔,有許多與計(jì)時(shí)器有關(guān)的各種事情的令人困惑的示例,但我很困惑.

So what is the best way to do this in boost::asio? Looking at the asio documentation, there are many confusing examples of various things to do with timers, but I'm quite confused.

我很想看到一個(gè)簡單易讀的例子:從套接字讀取,但最多等待 X 秒,之后函數(shù)要么不返回任何內(nèi)容,要么返回任何內(nèi)容能夠在超時(shí)到期之前從套接字讀取.

I'd love to see a simple-to-read example of this: Read from a socket, but wait for a maximum of X seconds after which the function either returns with nothing, or returns with whatever it was able to read from the socket before the timeout expired.

推薦答案

這已在 asio 郵件列表中提出,有一個(gè) ticket 也請(qǐng)求該功能.總而言之,如果您需要超時(shí)和可取消性,建議使用異步方法.

This has been brought up on the asio mailing lists, there's a ticket requesting the feature as well. To summarize, it is suggested to use asynchronous methods if you desire timeouts and cancellability.

如果您無法轉(zhuǎn)換為異步方法,您可以嘗試SO_RCVTIMEOSO_SNDTIMEO 套接字選項(xiàng).它們可以用 setsockopt 設(shè)置,描述符可以用 boost::asio::ip::tcp::socket::native 方法.man 7 socket 手冊(cè)頁說

If you cannot convert to asynchronous methods, you might try the SO_RCVTIMEO and SO_SNDTIMEO socket options. They can be set with setsockopt, the descriptor can be obtained with the boost::asio::ip::tcp::socket::native method. The man 7 socket man page says

SO_RCVTIMEO 和 SO_SNDTIMEO指定接收或發(fā)送超時(shí),直到報(bào)告錯(cuò)誤.參數(shù)是一個(gè)結(jié)構(gòu)體時(shí)間.如果輸入或輸出這個(gè)時(shí)期的功能塊時(shí)間,并且數(shù)據(jù)已經(jīng)發(fā)送或收到,該函數(shù)的返回值將是傳輸?shù)臄?shù)據(jù)量;如果不數(shù)據(jù)已傳輸并且已達(dá)到超時(shí)然后 -1 是返回 errno 設(shè)置為EAGAIN 或 EWOULDBLOCK 就像套接字被指定為是非阻塞的.如果超時(shí)是設(shè)置為零(默認(rèn))然后操作永遠(yuǎn)不會(huì)超時(shí).超時(shí)僅有效對(duì)于執(zhí)行套接字 I/O 的系統(tǒng)調(diào)用(例如,read(2),recvmsg(2), send(2), sendmsg(2));超時(shí)對(duì) select(2) 沒有影響,poll(2)、epoll_wait(2) 等

SO_RCVTIMEO and SO_SNDTIMEO Specify the receiving or sending timeouts until reporting an error. The argument is a struct timeval. If an input or output function blocks for this period of time, and data has been sent or received, the return value of that function will be the amount of data transferred; if no data has been transferred and the timeout has been reached then -1 is returned with errno set to EAGAIN or EWOULDBLOCK just as if the socket was specified to be non-blocking. If the timeout is set to zero (the default) then the operation will never timeout. Timeouts only have effect for system calls that perform socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts have no effect for select(2), poll(2), epoll_wait(2), etc.

這篇關(guān)于C++ Boost ASIO:如何讀/寫超時(shí)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Assertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(斷言失敗(size.width0 amp;amp; size.height0))
Rotate an image in C++ without using OpenCV functions(在 C++ 中旋轉(zhuǎn)圖像而不使用 OpenCV 函數(shù))
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開 avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無法設(shè)置 SVM 參數(shù))
Convert a single color with cvtColor(使用 cvtColor 轉(zhuǎn)換單一顏色)
主站蜘蛛池模板: 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 深圳市源和塑胶电子有限公司-首页| 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 辊道窑炉,辊道窑炉厂家-山东艾希尔 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 |