[> Back to homepage](../readme.md#documentation)

## Timeout options

Source code: [`source/core/timed-out.ts`](../source/core/timed-out.ts)

It is a good practice to set a timeout to prevent hanging requests.\
By default, there is no timeout set.

Note: The [`retry` configuration](7-retry.md) also applies to timeouts.

**All numbers refer to milliseconds.**

```js
import got from 'got';

const {timings} = await got('https://example.com', {
	timeout: {
		lookup: 100,
		connect: 50,
		secureConnect: 50,
		socket: 1000,
		send: 10000,
		response: 1000
	}
});

// Alternatively:
const {timings} = await got('https://example.com', {
	timeout: {
		request: 10000
	}
});

console.log(timings);
// {
// 	start: 1625474926602,
// 	socket: 1625474926605,
// 	lookup: 1625474926610,
// 	connect: 1625474926617,
// 	secureConnect: 1625474926631,
// 	upload: 1625474926631,
// 	response: 1625474926638,
// 	end: 1625474926642,
// 	error: undefined,
// 	abort: undefined,
// 	phases: {
// 		wait: 3,
// 		dns: 5,
// 		tcp: 7,
// 		tls: 14,
// 		request: 0,
// 		firstByte: 7,
// 		download: 4,
// 		total: 40
// 	}
// }
```

### `timeout`

**Type: `object`**

This object describes the maximum allowed time for particular events.

#### `lookup`

**Type: `number`**

Starts when a socket is assigned.\
Ends when the hostname has been resolved.

Does not apply when using a Unix domain socket.\
Does not apply when passing an IP address.

It is preferred to not use any greater value than `100`.

#### `connect`

**Type: `number`**

Starts when lookup completes.\
Ends when the socket is fully connected.

If `lookup` does not apply to the request, this event starts when the socket is assigned and ends when the socket is connected.

#### `secureConnect`

**Type: `number`**

Starts when `connect` completes.\
Ends when the handshake process completes.

This timeout applies only to HTTPS requests.

#### `socket`

**Type: `number`**

Starts when the socket is connected.\
Resets when new data is transferred.

It is the same as [`request.setTimeout(timeout)`](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback) which calls [`socket.setTimeout(timeout)`](https://nodejs.org/api/net.html#socketsettimeouttimeout-callback) after a socket is assigned to this request and is connected.

#### `send`

**Type: `number`**

Starts when the socket is connected.\
Ends when all data have been written to the socket.

**Note:**
> - This does not assure the data have been received by the other end!
> - It only assures that the data have been passed to the underlying OS.

#### `response`

**Type: `number`**

Starts when request has been flushed.\
Ends when the headers are received.

#### ~~`read`~~

**Type: `number`**

Starts when the headers are received.\
Ends when the response's `end` event fires.

**Note:**
> - This timeout is blocked by https://github.com/nodejs/node/issues/35923

#### `request`

**Type: `number`**

Starts when the request is initiated.\
Ends when the response's `end` event fires.

In other words, this is the global timeout.
