EuvDns.hpp
1 //
2 // Created by xiong on 2021/6/29.
3 //
4 
5 #ifndef EMX_EuvDns_HPP
6 #define EMX_EuvDns_HPP
7 
8 #include "uv.h"
9 #include <functional>
10 #include "core/EmxTypeDef.hpp"
11 
12 namespace Emx {
18  class EuvDns {
19  public:
20  EuvDns() :
21  m_loop(nullptr),
22  m_resolver(nullptr),
23  m_isRunning(false),
24  m_cb(nullptr) {}
25 
27  enum class TypeE : uint8_t {
28  Ipv4,
29  Ipv6,
30  UnSpec
31  };
38  using OnResolved = std::function<void(Emx::ErrCodeE e, addrinfo *addr, void *arg)>;
39 
46 
53  void Destroy();
54 
63  ErrCodeE Run(const char *server, OnResolved cb,
64  void *arg = nullptr, TypeE type = TypeE::UnSpec);
65 
66  private:
67  static void OnDestroy(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res);
68 
69  private:
70  EuvLoop *m_loop;
71  struct Data {
72  void *obj;
73  void *arg;
74  } m_data;
75  uv_getaddrinfo_t *m_resolver;
76  bool m_isRunning;
77  OnResolved m_cb;
78  char m_server[EMX_MAX_PATH_SIZE];
79  };
81 }
82 
83 #endif //EMX_EuvDns_HPP
用于异步解析DNS
Definition: EuvDns.hpp:18
TypeE
DNS解析类型
Definition: EuvDns.hpp:27
@ Ipv6
只解析IPV6类型地址
@ UnSpec
IPV4与IPV6类型地址均可
@ Ipv4
只解析IPV4类型地址
std::function< void(Emx::ErrCodeE e, addrinfo *addr, void *arg)> OnResolved
获取到解析结果后触发的回调函数
Definition: EuvDns.hpp:38
ErrCodeE Run(const char *server, OnResolved cb, void *arg=nullptr, TypeE type=TypeE::UnSpec)
开始运行地址解析
ErrCodeE Create(EuvLoop *loop)
创建DNS解析
EuvDns()
Definition: EuvDns.hpp:20
void Destroy()
销毁DNS解析,如果任务未执行则立刻返回,如果任务在执行中则以阻塞方式等待任务执行完毕
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10