Exemplo n.º 1
0
    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;
        }
    }
Exemplo n.º 2
0
    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);
    }