# DnsOptions


```
public final class DnsOptions
```

<br />

*** ** * ** ***

A class configuring Cronet's host resolution functionality. Note that while we refer to `
DNS` as the most common mechanism being used for brevity, settings apply to other means of resolving hostnames like hosts file resolution.

Cronet resolve hostnames in two ways - either by using the system resolver (using `
getaddrinfo` provided by system libraries), or by using a custom resolver which is built into the networking stack Cronet uses.

The built-in stack provides several advantages over using the system resolver:

- It has been tailored to the needs of the networking stack, particularly speed and stability.
- `getaddrinfo` is a blocking call which requires dedicating worker threads and makes cancellation impossible (we need to abandon the thread until the call completes)
- The `getaddrinfo` interface gives no insight into the root cause of failures
- `struct addrinfo` provides no TTL (Time To Live) of the returned addresses. This restricts flexibility of handling caching (e.g. allowing the use of stale DNS records) and requires us to either rely on OS DNS caches, or be extremely conservative with the TTL.
- As part of the OS, `getaddrinfo` evolves slowly. Using a custom stack enables Cronet to introduce features like encrypted DNS faster.

Most configuration in this class is only applicable if the built-in DNS resolver is used.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.Builder` Builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions`. |
| `@https://developer.android.com/reference/androidx/annotation/RequiresOptIn.html public annotation https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.Experimental` An annotation for APIs which are not considered stable yet. |
| `public class https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.StaleDnsOptions` A class configuring Cronet's stale DNS functionality. |
| `public final class https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.StaleDnsOptions.Builder` Builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.StaleDnsOptions`. |

| ### Public methods |
|---|---|
| `static https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#builder()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/reference/java/lang/Boolean.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getEnableStaleDns()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/reference/java/lang/Boolean.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getPersistHostCache()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/reference/java/lang/Long.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getPersistHostCachePeriodMillis()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/reference/java/lang/Boolean.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getPreestablishConnectionsToStaleDnsResults()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions.StaleDnsOptions` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getStaleDnsOptions()()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/reference/java/lang/Boolean.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/DnsOptions#getUseBuiltInDnsResolver()()` |

## Public methods

### builder

```
public static DnsOptions.Builder builder()
```

### getEnableStaleDns

```
public @Nullable Boolean getEnableStaleDns()
```

### getPersistHostCache

```
public @Nullable Boolean getPersistHostCache()
```

### getPersistHostCachePeriodMillis

```
public @Nullable Long getPersistHostCachePeriodMillis()
```

### getPreestablishConnectionsToStaleDnsResults

```
public @Nullable Boolean getPreestablishConnectionsToStaleDnsResults()
```

### getStaleDnsOptions

```
public @Nullable DnsOptions.StaleDnsOptions getStaleDnsOptions()
```

### getUseBuiltInDnsResolver

```
public @Nullable Boolean getUseBuiltInDnsResolver()
```