---
name: "ares_mkquery"
section: "3"
platform: "linux"
package: "c-ares"
version: "1.34.9-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ares_mkquery"
---

# ares\_mkquery(3)

Compose a single-question DNS query buffer

## NAME

ares\_mkquery - Compose a single-question DNS query buffer

## SYNOPSIS

```
#include <ares.h>
int ares_mkquery(const char *name, int dnsclass, int type,
                 unsigned short id, int rd, unsigned char **buf,
                 int *buflen)
```

## DESCRIPTION

This function is deprecated as of c-ares 1.10, please use *[ares\_dns\_record\_create(3)](/ares_dns_record_create/3.md)* instead.

The **ares\_mkquery** function composes a DNS query with a single question. The parameter *name* gives the query name as a NUL-terminated C string of period-separated labels optionally ending with a period; periods and backslashes within a label must be escaped with a backlash.  The parameters *dnsclass* and *type* give the class and type of the query using the values defined in **\<arpa/nameser.h\>**. The parameter *id* gives a 16-bit identifier for the query.  The parameter *rd* should be nonzero if recursion is desired, zero if not.  The query will be placed in an allocated buffer, a pointer to which will be stored in the variable pointed to by *buf*, and the length of which will be stored in the variable pointed to by *buflen*. It is the caller's responsibility to free this buffer using *[ares\_free\_string(3)](/ares_free_string/3.md)* when it is no longer needed.

Usage of *[ares\_mkquery(3)](/ares_mkquery/3.md)* is deprecated, whereas the function is equivalent to *[ares\_create\_query(3)](/ares_create_query/3.md)* with **max\_udp\_size** set to 0.

## RETURN VALUES

**ares\_mkquery** can return any of the following values:

- **ARES\_SUCCESS**

  Construction of the DNS query succeeded.

- **ARES\_ENOTFOUND**

  The query name *name* refers to a *.onion* domain name. See RFC 7686.

- **ARES\_EBADNAME**

  The query name *name* could not be encoded as a domain name, either because it contained a zero-length label or because it contained a label of more than 63 characters.

- **ARES\_ENOMEM**

  Memory was exhausted.

## SEE ALSO

[**ares\_expand\_name**(3)](/ares_expand_name/3.md), [**ares\_dns\_record**(3)](/ares_dns_record/3.md), [**ares\_free\_string**(3)](/ares_free_string/3.md)
