---
product: Chilkat
product_version: 11.7.0
language: delphidll
language_label: Delphi DLL
class: Dns
license: bundle
deprecated: false
reference_html: https://www.chilkatsoft.com/refdoc/dd_CkDnsRef.html
---
# Chilkat Dns — Delphi DLL — v11.7.0

> Chilkat 11.7.0 · language=delphidll · class=Dns
> Other versions: replace `11.7.0` in this URL. Other languages: `https://www.chilkatsoft.com/ai-docs/v/11.7.0/<lang>/classes/Dns.md`.
> Language-wide rules (install, unlock, error model, strings/bytes): `https://www.chilkatsoft.com/ai-docs/v/11.7.0/delphidll/guide.md`.

## Purpose

**Configure DNS resolution and query DNS records directly from Chilkat.**

`Chilkat.Dns` is a focused class for DNS configuration and DNS record querying. It allows applications to control the nameservers used by Chilkat, query common DNS record types into JSON, configure DNS-over-TLS preference, set DNS query timeouts, and obtain useful diagnostics through `LastErrorText`.

**DNS record queries**

Query common DNS record types and receive structured JSON results that are easy to inspect or pass to other application logic.

**Nameserver control**

Configure the nameservers Chilkat uses instead of relying only on the operating system's default DNS configuration.

**DNS-over-TLS preference**

Prefer DNS-over-TLS when appropriate for applications that need encrypted DNS lookups.

**Timeout settings**

Control how long DNS queries may wait before failing, which is useful for responsive applications and troubleshooting.

**Application-wide behavior**

Nameserver settings affect DNS resolution across Chilkat classes, not only the current `Dns` object.

**Diagnostics**

Use `LastErrorText` to troubleshoot DNS configuration, lookup failures, timeout problems, or nameserver connectivity issues.

**Common pattern:** Use `Dns` either to perform direct DNS lookups, or to configure the DNS behavior used by Chilkat as a whole. Because nameserver changes can affect DNS resolution across Chilkat classes, treat them as application-wide configuration rather than object-local state.

For an extended overview, see [Dns Class Overview](https://www.chilkatsoft.com/dns_class_overview.asp).

## Object creation, unlocking and error handling

**Create/Dispose**

```pascal
var
myObject: HCkDns;

begin
myObject := CkDns_Create();

// ...

CkDns_Dispose(myObject);
end;
```

`function CkDns_Create: HCkDns; stdcall;`

Creates an instance of the HCkDns object and returns a handle (i.e. a Pointer). The handle is passed in the 1st argument for the functions listed on this page.

`procedure CkDns_Dispose(handle: HCkDns); stdcall;`

Objects created by calling CkDns_Create must be freed by calling this method. A memory leak occurs if a handle is not disposed by calling this function.

Call `Global.UnlockBundle` once at the start of the program, before using this or any other Chilkat class. Any string unlocks a fully functional 30-day trial; a purchased unlock code is used in production. See `guide.md` for the exact code in Delphi DLL.

## Members common to every Chilkat class

Documented once per language in `common-members.md`; listed here so this page is self-contained.

| Property | Signature | Access | Meaning |
|---|---|---|---|
| `DebugLogFilePath` | `procedure CkDns_getDebugLogFilePath(objHandle: HCkDns; outPropVal: HCkString); stdcall; procedure CkDns_putDebugLogFilePath(objHandle: HCkDns; newPropVal: PWideChar); stdcall; function CkDns__debugLogFilePath(objHandle: HCkDns): PWideChar; stdcall;` | read/write | If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. |
| `LastErrorHtml` | `procedure CkDns_getLastErrorHtml(objHandle: HCkDns; outPropVal: HCkString); stdcall; function CkDns__lastErrorHtml(objHandle: HCkDns): PWideChar; stdcall;` | read-only | Provides HTML-formatted information about the last called method or property. |
| `LastErrorText` | `procedure CkDns_getLastErrorText(objHandle: HCkDns; outPropVal: HCkString); stdcall; function CkDns__lastErrorText(objHandle: HCkDns): PWideChar; stdcall;` | read-only | Provides plain text information about the last called method or property. |
| `LastErrorXml` | `procedure CkDns_getLastErrorXml(objHandle: HCkDns; outPropVal: HCkString); stdcall; function CkDns__lastErrorXml(objHandle: HCkDns): PWideChar; stdcall;` | read-only | Provides XML-formatted information about the last called method or property. |
| `LastMethodSuccess` | `function CkDns_getLastMethodSuccess(objHandle: HCkDns): wordbool; stdcall; procedure CkDns_putLastMethodSuccess(objHandle: HCkDns; newPropVal: wordbool); stdcall;` | read/write | Indicates the success or failure of the most recent method call: `True` means success, `False` means failure. |
| `VerboseLogging` | `function CkDns_getVerboseLogging(objHandle: HCkDns): wordbool; stdcall; procedure CkDns_putVerboseLogging(objHandle: HCkDns; newPropVal: wordbool); stdcall;` | read/write | If set to `True`, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. |
| `Version` | `procedure CkDns_getVersion(objHandle: HCkDns; outPropVal: HCkString); stdcall; function CkDns__version(objHandle: HCkDns): PWideChar; stdcall;` | read-only | Version of the component/library, such as "10.1.0" |

## Member index

| Member | Kind | Signature |
|---|---|---|
| `HeartbeatMs` | property, read/write | `function CkDns_getHeartbeatMs(objHandle: HCkDns): Integer; stdcall; procedure CkDns_putHeartbeatMs(objHandle: HCkDns; newPropVal: Integer); stdcall;` |
| `MaxWaitMs` | property, read/write | `function CkDns_getMaxWaitMs(objHandle: HCkDns): Integer; stdcall; procedure CkDns_putMaxWaitMs(objHandle: HCkDns; newPropVal: Integer); stdcall;` |
| `NumNameservers` | property, read-only | `function CkDns_getNumNameservers(objHandle: HCkDns): Integer; stdcall;` |
| `TlsPref` | property, read/write | `function CkDns_getTlsPref(objHandle: HCkDns): Integer; stdcall; procedure CkDns_putTlsPref(objHandle: HCkDns; newPropVal: Integer); stdcall;` |
| `UncommonOptions` | property, read/write | `procedure CkDns_getUncommonOptions(objHandle: HCkDns; outPropVal: HCkString); stdcall; procedure CkDns_putUncommonOptions(objHandle: HCkDns; newPropVal: PWideChar); stdcall; function CkDns__uncommonOptions(objHandle: HCkDns): PWideChar; stdcall;` |
| `AddDefaultNameservers` | method | `procedure CkDns_AddDefaultNameservers(objHandle: HCkDns) stdcall;` |
| `AddNameserver` | method | `procedure CkDns_AddNameserver(objHandle: HCkDns;     ipAddr: PWideChar;     supportsTls: wordbool) stdcall;` |
| `GetNameserver` | method | `function CkDns_GetNameserver(objHandle: HCkDns;     index: Integer;     outStr: HCkString): wordbool; stdcall; function CkDns__getNameserver(objHandle: HCkDns;     index: Integer): PWideChar; stdcall;` |
| `Query` | method | `function CkDns_Query(objHandle: HCkDns;     recordType: PWideChar;     domain: PWideChar;     answer: HCkJsonObject): wordbool; stdcall;` |
| `RemoveAllNameservers` | method | `procedure CkDns_RemoveAllNameservers(objHandle: HCkDns) stdcall;` |
| `RemoveNameserver` | method | `procedure CkDns_RemoveNameserver(objHandle: HCkDns;     ipAddr: PWideChar) stdcall;` |

## Properties

### Dns.HeartbeatMs

`Chilkat 11.7.0 · delphidll · Dns · HeartbeatMs · property · read/write · since 9.5.0.96`

```pascal
function CkDns_getHeartbeatMs(objHandle: HCkDns): Integer; stdcall;
procedure CkDns_putHeartbeatMs(objHandle: HCkDns; newPropVal: Integer); stdcall;
```

**Full documentation for this property (same in every language):** [Event Callback Examples](https://www.chilkatsoft.com/ai-docs/v/11.7.0/articles/event_callback_examples.md)

The interval in milliseconds between each `AbortCheck` event callback, which enables an application to abort certain method calls before they complete. **By default, HeartbeatMs is set to** `0`**, meaning no AbortCheck event callbacks will trigger.**

### Dns.MaxWaitMs

`Chilkat 11.7.0 · delphidll · Dns · MaxWaitMs · property · read/write · since 9.5.0.96`

```pascal
function CkDns_getMaxWaitMs(objHandle: HCkDns): Integer; stdcall;
procedure CkDns_putMaxWaitMs(objHandle: HCkDns; newPropVal: Integer); stdcall;
```

The maxiumum number of milliseconds to wait for the answer to a DNS query. A value of 0 is to wait indefinitely (no timeout). It's not a good idea to specify 0 (infinite timeout) or a value less than 1000 (1 second). The default value is 10000 milliseconds.

### Dns.NumNameservers

`Chilkat 11.7.0 · delphidll · Dns · NumNameservers · property · read-only · since 9.5.0.96`

```pascal
function CkDns_getNumNameservers(objHandle: HCkDns): Integer; stdcall;
```

The number of nameservers currently being used by Chilkat for DNS queries in all objects/classes, such as for HTTP, Email, FTP, SSH, etc.

### Dns.TlsPref

`Chilkat 11.7.0 · delphidll · Dns · TlsPref · property · read/write · since 9.5.0.96`

```pascal
function CkDns_getTlsPref(objHandle: HCkDns): Integer; stdcall;
procedure CkDns_putTlsPref(objHandle: HCkDns; newPropVal: Integer); stdcall;
```

Specifies the TLS preference. Possible values are:

- 0 = No TLS
- 1 = Prefer TLS if possible.
- 2 = Require TLS

The default value is 0. If TLS is preferred then DNS nameservers with TLS capability will be tried first. If none succeed, then UDP/TCP will be tried. If TLS is required, then only TLS capable nameservers will be tried and all DNS queries will use TLS.

Note: To use TLS, your application needs to first specify nameservers by calling AddNameserver once per nameserver with the supportsTls argument set to `True`.

### Dns.UncommonOptions

`Chilkat 11.7.0 · delphidll · Dns · UncommonOptions · property · read/write · since 11.4.0`

```pascal
procedure CkDns_getUncommonOptions(objHandle: HCkDns; outPropVal: HCkString); stdcall;
procedure CkDns_putUncommonOptions(objHandle: HCkDns; newPropVal: PWideChar); stdcall;
function CkDns__uncommonOptions(objHandle: HCkDns): PWideChar; stdcall;
```

This is a catch-all property to be used for uncommon needs. This property defaults to the empty string and should typically remain empty.

## Methods

### Dns.AddDefaultNameservers

`Chilkat 11.7.0 · delphidll · Dns · AddDefaultNameservers · method · since 9.5.0.96`

```pascal
procedure CkDns_AddDefaultNameservers(objHandle: HCkDns) stdcall;
```

Adds the default (auto-assigned) nameservers to the collection of nameservers used by Chilkat for DNS queries and domain to IP address lookups.

### Dns.AddNameserver

`Chilkat 11.7.0 · delphidll · Dns · AddNameserver · method · since 9.5.0.96`

```pascal
procedure CkDns_AddNameserver(objHandle: HCkDns;
    ipAddr: PWideChar;
    supportsTls: wordbool) stdcall;
```

Adds a new nameserver to the collection of nameservers used by Chilkat for DNS queries and domain to IP address lookups. The `ipAddr` specifies the IPv4 address of the nameserver. The `supportsTls` indicates if the namserver supports DoT (DNS over TLS. DoT uses port 853 for encrypted DNS communication.) If the TlsPreference property is set to 1 or 2, then Chilkat will use TLS nameservers.

### Dns.GetNameserver

`Chilkat 11.7.0 · delphidll · Dns · GetNameserver · method · since 9.5.0.96`

```pascal
function CkDns_GetNameserver(objHandle: HCkDns;
    index: Integer;
    outStr: HCkString): wordbool; stdcall;
function CkDns__getNameserver(objHandle: HCkDns;
    index: Integer): PWideChar; stdcall;
```

Returns the IP address of the Nth nameserver currently used by Chilkat for DNS queries and domain to IP address lookups. The `index` specifies the index of the nameserver. The 1st nameserver is at `index` 0.

Returns True for success, False for failure.

See the notes about [PWideChar memory ownership and validity](https://www.chilkatsoft.com/delphi_pwidechar.asp).

### Dns.Query

`Chilkat 11.7.0 · delphidll · Dns · Query · method · since 9.5.0.96`

```pascal
function CkDns_Query(objHandle: HCkDns;
    recordType: PWideChar;
    domain: PWideChar;
    answer: HCkJsonObject): wordbool; stdcall;
```

Performs an DNS query for `domain` and returns the answer in `answer`. The type of DNS query is specified in `recordType` and can be A, AAAA, ALIAS, CAA, MX, NS, SOA, TXT. Additional record types can be added as needed.

Async variant: `QueryAsync` — same arguments, returns a `Task` (see Async variants below).

### Dns.RemoveAllNameservers

`Chilkat 11.7.0 · delphidll · Dns · RemoveAllNameservers · method · since 9.5.0.96`

```pascal
procedure CkDns_RemoveAllNameservers(objHandle: HCkDns) stdcall;
```

Removes all nameservers from the collection of nameservers used by Chilkat. An application can call this method to reset to 0 nameservers before adding new nameservers. If a DNS domain to IP address resolution is needed by Chilkat, then the auto-assigned nameserver IP addresses will be automaticaly restored.

### Dns.RemoveNameserver

`Chilkat 11.7.0 · delphidll · Dns · RemoveNameserver · method · since 9.5.0.96`

```pascal
procedure CkDns_RemoveNameserver(objHandle: HCkDns;
    ipAddr: PWideChar) stdcall;
```

Removes a nameserver from the collection of nameservers used by Chilkat. The `ipAddr` is the IPv4 address of the nameserver to be removed.

## Events and callbacks

### Dns.AbortCheck (event)

`Chilkat 11.7.0 · delphidll · Dns · AbortCheck · event`

```pascal
function MyAbortCheck(): Integer; cdecl;
```

Enables a method call to be aborted by triggering the AbortCheck event at intervals defined by the `HeartbeatMs` property. If HeartbeatMs is set to its default value of 0, no events will occur. For instance, set HeartbeatMs to 200 to trigger 5 AbortCheck events per second. Return `True` to abort; return `False` to continue (not abort)

### Dns.PercentDone (event)

`Chilkat 11.7.0 · delphidll · Dns · PercentDone · event`

```pascal
function MyPercentDone(pctDone: Integer): Integer; cdecl;
```

This provides the percentage completion for any method involving network communications or time-consuming processing, assuming the progress can be measured as a percentage. This event is triggered only when it's possible and logical to express the operation's progress as a percentage. The `pctDone` argument will range from 1 to 100. For methods that finish quickly, the number of PercentDone callbacks may vary, but the final callback will have `pctDone` equal to 100. For longer operations, callbacks will not exceed one per percentage point (e.g., 1, 2, 3, ..., 98, 99, 100).

The PercentDone callback also acts as an `AbortCheck` event. For fast methods where PercentDone fires, an AbortCheck event may not trigger since the PercentDone callback already provides an opportunity to abort. For longer operations, where time between PercentDone callbacks is extended, AbortCheck callbacks enable more responsive operation termination.

Return `True` to abort; return `False` to continue (not abort)

### Dns.ProgressInfo (event)

`Chilkat 11.7.0 · delphidll · Dns · ProgressInfo · event`

```pascal
procedure MyProgressInfo(name: PWideChar; value: PWideChar) cdecl;
```

This event callback provides `tag name`/value pairs that detail what occurs during a method call. To discover existing tag names, create code to handle the event, emit the pairs, and review them. Most tag names are self-explanatory.

Note: Some Chilkat methods don't fire any ProgressInfo events.

### Dns.TaskCompleted (event)

`Chilkat 11.7.0 · delphidll · Dns · TaskCompleted · event`

```pascal
procedure MyTaskCompleted(task: HCkTask) cdecl;
```

Called from the background thread when an asynchronous task completes.

## Async variants

Each returns a `Task` instead of the result and takes the same arguments as the synchronous method; run the task, wait for `Finished`, then read the result from the task. No new Async methods are added from 11.7.0 on.

```pascal
function CkDns_QueryAsync(objHandle: HCkDns;
    recordType: PWideChar;
    domain: PWideChar;
    answer: HCkJsonObject): HCkTask; stdcall;
```

## Related classes

[`JsonObject`](https://www.chilkatsoft.com/ai-docs/v/11.7.0/delphidll/classes/JsonObject.md)

