# dns-socket

> Make low-level DNS requests with retry and timeout support.

Latest version **4.2.2** (published 2021-05-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install dns-socket
pnpm add dns-socket
yarn add dns-socket
bun add dns-socket
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.2.2 |
| Published | 2021-05-28 |
| First published | 2016-02-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6 |
| Dependencies | 1 |
| Unpacked size | 11.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 106 |
| Author | Mathias Buus |
| Maintainers | mafintosh, silverwind |
| Keywords | dns, domain, socket, low-level |

## Links

- npm: https://www.npmjs.com/package/dns-socket
- Repository: https://github.com/mafintosh/dns-socket
- Issues: https://github.com/mafintosh/dns-socket/issues
- npm.io page: https://npm.io/package/dns-socket

## Dependencies (1)

- [dns-packet](https://npm.io/package/dns-packet.md) ^5.2.4

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 4.2.2 (latest) — 2021-05-28
- 4.2.1 — 2020-07-06
- 4.2.0 — 2019-02-10
- 4.1.2 — 2019-01-22
- 4.1.1 — 2018-08-07
- 4.1.0 — 2018-07-03
- 4.0.0 — 2018-06-01
- 3.0.0 — 2018-02-11
- 2.0.0 — 2018-01-14
- 1.6.3 — 2018-01-13
- 1.6.2 — 2017-06-08
- 1.6.1 — 2017-02-05
- 1.6.0 — 2017-02-05
- 1.5.0 — 2017-02-05
- 1.4.2 — 2016-09-16
- … 8 more at https://npm.io/package/dns-socket/versions

## README

# dns-socket
[![](https://img.shields.io/npm/v/dns-socket.svg?style=flat)](https://www.npmjs.org/package/dns-socket) [![](https://img.shields.io/npm/dm/dns-socket.svg)](https://www.npmjs.org/package/dns-socket) [![](https://api.travis-ci.org/mafintosh/dns-socket.svg?style=flat)](https://travis-ci.org/mafintosh/dns-socket)

Make low-level DNS requests with retry and timeout support.

```
npm install dns-socket
```

## Usage

``` js
const dnsSocket = require('dns-socket')
const socket = dnsSocket()

socket.query({
  questions: [{
    type: 'A',
    name: 'google.com'
  }]
}, 53, '8.8.8.8', (err, res) => {
  console.log(err, res) // prints the A record for google.com
})
```

## API

#### `var socket = dns([options])`

Create a new DNS socket instance. The `options` object includes:

- `retries` *Number*: Number of total query attempts made during `timeout`. Default: 5.
- `socket` *Object*: A custom dgram socket. Default: A `'udp4'` socket.
- `timeout` *Number*: Total timeout in milliseconds after which a `'timeout'` event is emitted. Default: 7500.
- `maxQueries` *Number*: Each request has an id, this is stored as static sized array. maxQueries is the size of this array, limiting the max number of inflight requests. Default: 10000.
- `maxRedirects` *Number*: If you query for a single `A` record and get back `CNAME`, the lib will try to follow the chain and resolve the `CNAME` to A. The maximum number of steps is defined by the `maxRedirects`. Default: 0
- `timeoutChecks` *Number*: Timeouts are checked each `timeoutChecks` ms, for large number of parallel request, you might want to increase this number. Default: `timeout` / 10

#### `socket.on('query', query, port, host)`

Emitted when a dns query is received. The query is a [dns-packet](https://github.com/mafintosh/dns-packet)

#### `socket.on('response', response, port, host)`

Emitted when a dns response is received. The response is a [dns-packet](https://github.com/mafintosh/dns-packet)

#### `var id = socket.query(query, port, [host], [callback])`

Send a dns query. If host is omitted it defaults to `127.0.0.1`. When the remote replies the callback is called with `(err, response, query)` and an response is emitted as well. If the query times out the callback is called with an error.
The `host` parameter can be an array, during resolve the lib will randomly select one host.

Returns the query id

#### `socket.response(query, response, port, [host])`

Send a response to a query.

#### `socket.cancel(id)`

Cancel a query

#### `socket.bind([port][, address][, onlistening])`
#### `socket.bind(options, [onlistening])`

Bind the underlying udp socket to a specific port. Takes the same arguments as [socket#bind](https://nodejs.org/docs/latest/api/dgram.html#dgram_socket_bind_port_address_callback).

#### `socket.destroy([onclose])`

Destroy the socket.

#### `socket.inflight`

Number of inflight queries.

## License

MIT

---
_Source: https://npm.io/package/dns-socket · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
