使用select函数监测http请求超时

编程入门 行业动态 更新时间:2024-10-09 22:23:48

使用select<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数监测http请求超时"/>

使用select函数监测http请求超时

人生如逆旅

我亦是行人

最近研究怎么实现HTTP请求超时检测并踢掉请求的功能。

一开始想到用linux的信号机制,可是用了感觉问题挺多的,好多时候不生效,要么就是不能一个进程里重复用。

然后就在博客上找,基本都是说select的,索性我就两个都用了,DNS请求用信号,TCP连接和HTTP请求用seletct。

一般我们用select都是在用到多路复用的情况下,也就是委托系统内核帮我们先检测一下这一堆IO中是否有事件,而不是程序员开发个轮询非阻塞的东西去试探,当然select也需要开发程序去轮询,但起码知道一定有事件了。

这次实现检测HTTP请求响应也是同理,当select提醒了再去读不就行了吗,既可以设置超时而且还不用设置成非阻塞,实在简单方便呀。

利用自己开发的一些HTTP请求库实现了一个简单的例子:

DNS请求超时

DNS请求超时控制:

std::string get_host(std::string name) {struct hostent *addr = nullptr;std::string host;tmp = "Connect the DNS server time out, please check your url and network!(%d)";signal(SIGALRM, alarmhandle);alarm(5);addr = gethostbyname(name.c_str());alarm(0);sigrelse(SIGALRM);// 如果是网络问题,这里会返回空指针if (!addr) {std::cerr << "Can't connect the DNS, please check your url and network!" << std::endl;bbkgl::error_num = DNSERROR;}elsehost = std::string(inet_ntoa(*(struct in_addr *)addr->h_addr_list[0]));return host;
}

样例程序:

#include <map>
#include <cstdio>
#include "crequests.h"int main() {std::map<std::string, std::string> headers;headers[

更多推荐

使用select函数监测http请求超时

本文发布于:2024-03-10 19:19:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728826.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   select   http

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!