# ConnectionPool

<a id="connectionpool"></a>

# ConnectionPool

```cpp
#include <icy/http/server.h>

class ConnectionPool
```

[Defined in src/http/include/icy/http/server.h:292](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L292)

LIFO connection pool for reusing [ServerConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#serverconnection-1) objects. Avoids per-request heap allocation by resetting and reusing connections instead of destroying and recreating them.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
| [`ServerConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#ptr-18) | [`acquire`](#acquire) `inline` | Takes a connection from the pool for reuse. |
| `bool` | [`release`](#release) `inline` | Returns a connection to the pool after use. |
| `void` | [`setMaxSize`](#setmaxsize) `inline` | Sets the maximum number of connections the pool will hold. |
| `size_t` | [`size`](#size-8) `const` `inline` | Returns the current number of connections held in the pool. |

---

<a id="acquire"></a>

### acquire

`inline`

```cpp
inline ServerConnection::Ptr acquire()
```

[Defined in src/http/include/icy/http/server.h:297](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L297)

Takes a connection from the pool for reuse. 
#### Returns
A pooled connection, or nullptr if the pool is empty.

---

<a id="release"></a>

### release

`inline`

```cpp
inline bool release(ServerConnection::Ptr & conn)
```

[Defined in src/http/include/icy/http/server.h:308](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L308)

Returns a connection to the pool after use. 
#### Returns
true if accepted into the pool; false if the pool is full.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `conn` | [`ServerConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#ptr-18) & | The connection to return. |

---

<a id="setmaxsize"></a>

### setMaxSize

`inline`

```cpp
inline void setMaxSize(size_t n)
```

[Defined in src/http/include/icy/http/server.h:317](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L317)

Sets the maximum number of connections the pool will hold.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `n` | `size_t` | Maximum pool capacity. |

---

<a id="size-8"></a>

### size

`const` `inline`

```cpp
inline size_t size() const
```

[Defined in src/http/include/icy/http/server.h:320](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L320)

Returns the current number of connections held in the pool.

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| std::vector< [`ServerConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#ptr-18) > | [`_pool`](#_pool)  |  |
| `size_t` | [`_maxSize`](#_maxsize)  |  |

---

<a id="_pool"></a>

### _pool

```cpp
std::vector< ServerConnection::Ptr > _pool
```

Type: std::vector< [`ServerConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#ptr-18) >

[Defined in src/http/include/icy/http/server.h:323](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L323)

---

<a id="_maxsize"></a>

### _maxSize

```cpp
size_t _maxSize = 128
```

[Defined in src/http/include/icy/http/server.h:324](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/server.h#L324)
