static void resolve(uv_loop_t* loop, const std::string& host, int port, void* data, Callback cb, struct addrinfo* hints = NULL) { Resolver* resolver = new Resolver(host, port, data, cb); std::ostringstream ss; ss << port; int rc = uv_getaddrinfo(loop, &resolver->req_, on_resolve, host.c_str(), ss.str().c_str(), hints); if (rc != 0) { resolver->status_ = FAILED_BAD_PARAM; resolver->cb_(resolver); delete resolver; } }
static void on_resolve(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { Resolver* resolver = static_cast<Resolver*>(req->data); if (status != 0) { resolver->status_ = FAILED_UNABLE_TO_RESOLVE; } else if (!resolver->address_.init(res->ai_addr)) { resolver->status_ = FAILED_UNSUPPORTED_ADDRESS_FAMILY; } else { resolver->status_ = SUCCESS; } resolver->cb_(resolver); delete resolver; uv_freeaddrinfo(res); }