---
name: "ares_create_query"
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_create_query"
---

# ares\_create\_query(3)

Compose a single-question DNS query buffer

## NAME

ares\_create\_query - Compose a single-question DNS query buffer

## SYNOPSIS

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

## DESCRIPTION

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

The *[ares\_create\_query(3)](/ares_create_query/3.md)* 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.  The parameter *max\_udp\_size* should be nonzero to activate EDNS. Usage of *[ares\_create\_query(3)](/ares_create_query/3.md)* with *max\_udp\_size* set to zero is equivalent to using *[ares\_mkquery(3)](/ares_mkquery/3.md)*.

## RETURN VALUES

**ares\_create\_query** 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.

## AVAILABILITY

Added in c-ares 1.10.0

## SEE ALSO

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