# GetAddrInfoReq

<a id="getaddrinforeq"></a>

# GetAddrInfoReq

```cpp
#include <icy/request.h>

struct GetAddrInfoReq
```

[Defined in src/base/include/icy/request.h:188](https://github.com/auscaster/icey/blob/main/src/base/include/icy/request.h#L188)

> **Inherits:** [`Request< uv_getaddrinfo_t, GetAddrInfoEvent >`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2)

DNS resolver request to get the IP address of a hostname.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`GetAddrInfoReq`](#getaddrinforeq-1) | `function` | Declared here |
| [`resolve`](#resolve) | `function` | Declared here |
| [`getAddrInfoCallback`](#getaddrinfocallback) | `function` | Declared here |
| [`Request`](#request-4) | `typedef` | Declared here |
| [`req`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#req-1) | `variable` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`callback`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#callback-1) | `variable` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-3) | `function` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#invoke-1) | `function` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#invoke-2) | `function` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`defaultCallback`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#defaultcallback) | `function` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`Type`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#type-11) | `typedef` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |
| [`Event`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#event) | `typedef` | Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) |

## Inherited from [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`req`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#req-1)  | The underlying libuv request object. |
| `variable` | [`callback`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#callback-1)  | Called when the request completes. |
| `function` | [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-3) `inline` | Construct the request and set `req.data` to `this` so callbacks can recover the wrapper pointer. |
| `function` | [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#invoke-1) `inline` `-> std::enable_if_t<!std::is_void< std::invoke_result_t< F, Args... > >::value, int >` | Call `f` with `args`. If `f` returns a non-zero libuv error code, the `callback` is invoked immediately with that status. |
| `function` | [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#invoke-2) `inline` `-> std::enable_if_t< std::is_void< std::invoke_result_t< F, Args... > >::value >` | Call `f` with `args`. Overload for void-returning functions; no error checking is performed. |
| `function` | [`defaultCallback`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#defaultcallback) `static` `inline` | Standard libuv completion callback. Invokes `callback` with the status event and then deletes the [`Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2) wrapper. |
| `typedef` | [`Type`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#type-11)  |  |
| `typedef` | [`Event`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#event)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`GetAddrInfoReq`](#getaddrinforeq-1) `inline` | Construct and set `req.data` to `this`. |
| `auto` | [`resolve`](#resolve) `inline` | Begin asynchronous DNS resolution of `host` at `port`. |

---

<a id="getaddrinforeq-1"></a>

### GetAddrInfoReq

`inline`

```cpp
inline GetAddrInfoReq()
```

[Defined in src/base/include/icy/request.h:193](https://github.com/auscaster/icey/blob/main/src/base/include/icy/request.h#L193)

Construct and set `req.data` to `this`.

---

<a id="resolve"></a>

### resolve

`inline`

```cpp
inline auto resolve(const std::string & host, int port, uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/base/include/icy/request.h:225](https://github.com/auscaster/icey/blob/main/src/base/include/icy/request.h#L225)

Begin asynchronous DNS resolution of `host` at `port`.

The result is delivered to `callback` as a [`GetAddrInfoEvent`](https://auscaster.com/icey/docs/api-reference/icy-uv-GetAddrInfoEvent.md#getaddrinfoevent). The `addrinfo` pointer in the event is freed immediately after the callback returns; do not retain it.

#### Returns
`true` if the request was submitted successfully.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `host` | `const std::string &` | Hostname or numeric IP address string to resolve. |
| `port` | `int` | Port number; converted to a service string for `getaddrinfo`. |
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop on which to run the resolution. |

## Public Static Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`getAddrInfoCallback`](#getaddrinfocallback) `static` `inline` | libuv completion callback for `uv_getaddrinfo`. |

---

<a id="getaddrinfocallback"></a>

### getAddrInfoCallback

`static` `inline`

```cpp
static inline void getAddrInfoCallback(Request::Type * req, int status, struct addrinfo * res)
```

[Defined in src/base/include/icy/request.h:206](https://github.com/auscaster/icey/blob/main/src/base/include/icy/request.h#L206)

libuv completion callback for `uv_getaddrinfo`.

Invokes the stored callback with the resolved address list, then frees the `addrinfo` chain and deletes the wrapper.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `req` | [`Request::Type`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#type-11) * | The completed `uv_getaddrinfo_t` request. |
| `status` | `int` | libuv status code. |
| `res` | `struct addrinfo *` | Resolved address list (freed after callback returns). |

## Public Types

| Name | Description |
|------|-------------|
| [`Request`](#request-4)  |  |

---

<a id="request-4"></a>

### Request

```cpp
using Request = uv::Request< uv_getaddrinfo_t, GetAddrInfoEvent >
```

Type: [`uv::Request`](https://auscaster.com/icey/docs/api-reference/icy-uv-Request.md#request-2)< uv_getaddrinfo_t, [`GetAddrInfoEvent`](https://auscaster.com/icey/docs/api-reference/icy-uv-GetAddrInfoEvent.md#getaddrinfoevent) >

[Defined in src/base/include/icy/request.h:190](https://github.com/auscaster/icey/blob/main/src/base/include/icy/request.h#L190)
