# Connection

<a id="connection-1"></a>

# Connection

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

class Connection
```

[Defined in src/http/include/icy/http/connection.h:34](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L34)

> **Inherits:** [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter)
> **Subclassed by:** [`ClientConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1), [`ServerConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#serverconnection-1)

Base HTTP connection managing socket I/O and message lifecycle

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`ConnectionStream`](#connectionstream) | `friend` | Declared here |
| [`ConnectionAdapter`](#connectionadapter) | `friend` | Declared here |
| [`Connection`](#connection-2) | `function` | Declared here |
| [`~Connection`](#connection-3) | `function` | Declared here |
| [`onHeaders`](#onheaders-1) | `function` | Declared here |
| [`onPayload`](#onpayload-1) | `function` | Declared here |
| [`onComplete`](#oncomplete-1) | `function` | Declared here |
| [`onClose`](#onclose-4) | `function` | Declared here |
| [`send`](#send-12) | `function` | Declared here |
| [`sendOwned`](#sendowned-10) | `function` | Declared here |
| [`sendHeader`](#sendheader) | `function` | Declared here |
| [`close`](#close-27) | `function` | Declared here |
| [`markActive`](#markactive) | `function` | Declared here |
| [`beginStreaming`](#beginstreaming) | `function` | Declared here |
| [`endStreaming`](#endstreaming) | `function` | Declared here |
| [`closed`](#closed-6) | `function` | Declared here |
| [`error`](#error-17) | `function` | Declared here |
| [`headerAutoSendEnabled`](#headerautosendenabled) | `function` | Declared here |
| [`setHeaderAutoSendEnabled`](#setheaderautosendenabled) | `function` | Declared here |
| [`replaceAdapter`](#replaceadapter) | `function` | Declared here |
| [`replaceAdapter`](#replaceadapter-1) | `function` | Declared here |
| [`secure`](#secure) | `function` | Declared here |
| [`socket`](#socket-6) | `function` | Declared here |
| [`adapter`](#adapter) | `function` | Declared here |
| [`request`](#request-5) | `function` | Declared here |
| [`response`](#response-2) | `function` | Declared here |
| [`incomingHeader`](#incomingheader-1) | `function` | Declared here |
| [`outgoingHeader`](#outgoingheader-1) | `function` | Declared here |
| [`_socket`](#_socket-1) | `variable` | Declared here |
| [`_adapter`](#_adapter) | `variable` | Declared here |
| [`_request`](#_request-1) | `variable` | Declared here |
| [`_response`](#_response-1) | `variable` | Declared here |
| [`_error`](#_error-4) | `variable` | Declared here |
| [`_closed`](#_closed) | `variable` | Declared here |
| [`_shouldSendHeader`](#_shouldsendheader) | `variable` | Declared here |
| [`setError`](#seterror-5) | `function` | Declared here |
| [`onSocketConnect`](#onsocketconnect-3) | `function` | Declared here |
| [`onSocketRecv`](#onsocketrecv-3) | `function` | Declared here |
| [`onSocketError`](#onsocketerror-3) | `function` | Declared here |
| [`onSocketClose`](#onsocketclose-2) | `function` | Declared here |
| [`Ptr`](#ptr-17) | `typedef` | Declared here |
| [`priority`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#priority-3) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`~SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-3) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-2) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`setSender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#setsender) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sender) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`addReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#addreceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`removeReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#removereceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`hasReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#hasreceiver) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#receivers) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketconnect) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketerror) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketclose) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_sender) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_receivers) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_dirty`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dirty) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`_dispatchDepth`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dispatchdepth) | `variable` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |
| [`cleanupReceivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#cleanupreceivers) | `function` | Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) |

## Inherited from [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`priority`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#priority-3)  | The priority of this adapter for STL sort operations. |
| `function` | [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-1)  | Creates the [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter). |
| `function` | [`~SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter-2) `virtual` `noexcept` | Destroys the [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter). |
| `function` | [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1) `virtual` | Sends the given data buffer to the connected peer. Returns the number of bytes sent or -1 on error. No exception will be thrown. For TCP sockets the given peer address must match the connected peer address. |
| `function` | [`send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-2) `virtual` |  |
| `function` | [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-2) `virtual` | Sends an owned payload buffer to the connected peer. |
| `function` | [`sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-3) `virtual` |  |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket) `virtual` | Sends the given packet to the connected peer. Returns the number of bytes sent or -1 on error. No exception will be thrown. For TCP sockets the given peer address must match the connected peer address. |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-1) `virtual` |  |
| `function` | [`sendPacket`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendpacket-2) `virtual` | Sends the given packet to the connected peer. This method provides delegate compatibility, and unlike other send methods throws an exception if the underlying socket is closed. |
| `function` | [`setSender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#setsender) `virtual` | Sets the pointer to the outgoing data adapter. Send methods proxy data to this adapter by default. |
| `function` | [`sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sender)  | Returns the output [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) pointer. |
| `function` | [`addReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#addreceiver) `virtual` | Sets the pointer to the incoming data adapter. Events proxy data to this adapter by default. |
| `function` | [`removeReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#removereceiver) `virtual` | Remove the given receiver. |
| `function` | [`hasReceiver`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#hasreceiver) `virtual` | Returns true if the given receiver is connected. |
| `function` | [`receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#receivers)  | Returns all currently registered input [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) pointers. Dead (removed) entries are excluded from the returned list. |
| `function` | [`onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketconnect) `virtual` | Called when the socket establishes a connection. Forwards the event to all registered receivers in priority order. Override to intercept before the application sees the event. |
| `function` | [`onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1) `virtual` | Called when data is received from the socket. Forwards the event to all registered receivers in priority order. |
| `function` | [`onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketerror) `virtual` | Called when the socket encounters an error. Forwards the event to all registered receivers in priority order. |
| `function` | [`onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketclose) `virtual` | Called when the socket is closed. Forwards the event to all registered receivers in priority order. |
| `variable` | [`_sender`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_sender)  |  |
| `variable` | [`_receivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_receivers)  |  |
| `variable` | [`_dirty`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dirty)  |  |
| `variable` | [`_dispatchDepth`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#_dispatchdepth)  |  |
| `function` | [`cleanupReceivers`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#cleanupreceivers) `virtual` |  |

## Friends

| Name | Description |
|------|-------------|
| [`ConnectionStream`](#connectionstream)  |  |
| [`ConnectionAdapter`](#connectionadapter)  |  |

---

<a id="connectionstream"></a>

### ConnectionStream

```cpp
friend class ConnectionStream
```

[Defined in src/http/include/icy/http/connection.h:148](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L148)

---

<a id="connectionadapter"></a>

### ConnectionAdapter

```cpp
friend class ConnectionAdapter
```

[Defined in src/http/include/icy/http/connection.h:149](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L149)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Connection`](#connection-2)  | Creates a [Connection](#connection-1) using the given TCP socket. |
|  | [`~Connection`](#connection-3) `virtual` `noexcept` |  |
| `void` | [`onHeaders`](#onheaders-1) `virtual` | Called when the incoming HTTP headers have been fully parsed. |
| `void` | [`onPayload`](#onpayload-1) `virtual` | Called for each chunk of incoming body data after headers are complete. |
| `void` | [`onComplete`](#oncomplete-1) `virtual` | Called when the incoming HTTP message is fully received. |
| `void` | [`onClose`](#onclose-4) `virtual` | Called when the connection is closed. |
| `ssize_t` | [`send`](#send-12) `virtual` `override` | Send raw data to the peer. |
| `ssize_t` | [`sendOwned`](#sendowned-10) `virtual` `override` | Send an owned payload buffer to the peer. |
| `ssize_t` | [`sendHeader`](#sendheader) `virtual` | Send the outdoing HTTP header. |
| `void` | [`close`](#close-27) `virtual` | Close the connection and schedule the object for deferred deletion. |
| `void` | [`markActive`](#markactive) `virtual` `inline` | Marks the connection as active. [Server](https://auscaster.com/icey/docs/api-reference/icy-http-Server.md#server) connections override this to refresh the idle timer. |
| `void` | [`beginStreaming`](#beginstreaming) `virtual` `inline` | Explicitly enter long-lived streaming mode. Base connections ignore this; server connections use it to disable keep-alive idle reaping while a response stream is active. |
| `void` | [`endStreaming`](#endstreaming) `virtual` `inline` | Exit long-lived streaming mode. |
| `bool` | [`closed`](#closed-6) `const` | Return true if the connection is closed. |
| [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) | [`error`](#error-17) `const` | Return the error object if any. |
| `bool` | [`headerAutoSendEnabled`](#headerautosendenabled) `const` | Return true if headers should be automatically sent. |
| `void` | [`setHeaderAutoSendEnabled`](#setheaderautosendenabled)  | Enable or disable automatic header emission for the next outgoing send path. |
| `void` | [`replaceAdapter`](#replaceadapter) `virtual` | Assign the new [ConnectionAdapter](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionAdapter.md#connectionadapter-1) and setup the chain. The flow is: [Connection](#connection-1) <-> [ConnectionAdapter](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionAdapter.md#connectionadapter-1) <-> Socket. Takes ownership of the adapter (deferred deletion via uv loop). |
| `void` | [`replaceAdapter`](#replaceadapter-1) `virtual` | Overload for nullptr (used in destructor to clear adapter). |
| `bool` | [`secure`](#secure) `const` | Return true if the connection uses TLS/SSL. |
| [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) & | [`socket`](#socket-6)  | Return the underlying socket pointer. |
| [`net::SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) * | [`adapter`](#adapter) `const` | Return the underlying adapter pointer. |
| [`Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) & | [`request`](#request-5)  | The HTTP request headers. |
| [`Response`](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) & | [`response`](#response-2)  | The HTTP response headers. |
| [`http::Message`](https://auscaster.com/icey/docs/api-reference/icy-http-Message.md#message-1) * | [`incomingHeader`](#incomingheader-1) `virtual` | Returns the incoming HTTP message header (request or response depending on role). |
| [`http::Message`](https://auscaster.com/icey/docs/api-reference/icy-http-Message.md#message-1) * | [`outgoingHeader`](#outgoingheader-1) `virtual` | Returns the outgoing HTTP message header (request or response depending on role). |

---

<a id="connection-2"></a>

### Connection

```cpp
Connection(const net::TCPSocket::Ptr & socket = std::make_shared< net::TCPSocket >())
```

[Defined in src/http/include/icy/http/connection.h:41](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L41)

Creates a [Connection](#connection-1) using the given TCP socket.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | const [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) & | The TCP socket to use for I/O. Defaults to a new TCPSocket. |

---

<a id="connection-3"></a>

### ~Connection

`virtual` `noexcept`

```cpp
virtual ~Connection() noexcept
```

[Defined in src/http/include/icy/http/connection.h:42](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L42)

---

<a id="onheaders-1"></a>

### onHeaders

`virtual`

```cpp
virtual void onHeaders()
```

[Defined in src/http/include/icy/http/connection.h:45](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L45)

Called when the incoming HTTP headers have been fully parsed.

#### Reimplemented by

- [`ClientConnection::onHeaders`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#onheaders)
- [`ServerConnection::onHeaders`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#onheaders-2)

---

<a id="onpayload-1"></a>

### onPayload

`virtual`

```cpp
virtual void onPayload(const MutableBuffer & buffer)
```

[Defined in src/http/include/icy/http/connection.h:49](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L49)

Called for each chunk of incoming body data after headers are complete.

#### Reimplemented by

- [`ClientConnection::onPayload`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#onpayload)
- [`ServerConnection::onPayload`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#onpayload-2)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `buffer` | const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) & | Buffer containing the received data chunk. |

---

<a id="oncomplete-1"></a>

### onComplete

`virtual`

```cpp
virtual void onComplete()
```

[Defined in src/http/include/icy/http/connection.h:52](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L52)

Called when the incoming HTTP message is fully received.

#### Reimplemented by

- [`ClientConnection::onComplete`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#oncomplete)
- [`ServerConnection::onComplete`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#oncomplete-2)

---

<a id="onclose-4"></a>

### onClose

`virtual`

```cpp
virtual void onClose()
```

[Defined in src/http/include/icy/http/connection.h:55](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L55)

Called when the connection is closed.

#### Reimplemented by

- [`ClientConnection::onClose`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#onclose-3)
- [`ServerConnection::onClose`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#onclose-5)

---

<a id="send-12"></a>

### send

`virtual` `override`

```cpp
virtual ssize_t send(const char * data, size_t len, int flags = 0) override
```

[Defined in src/http/include/icy/http/connection.h:61](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L61)

Send raw data to the peer.

This is the zero-copy fast path. The caller retains ownership of the payload until the underlying async write completes.

#### Reimplements

- [`SocketAdapter::send`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#send-1)

#### Reimplemented by

- [`ClientConnection::send`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#send-11)

---

<a id="sendowned-10"></a>

### sendOwned

`virtual` `override`

```cpp
virtual ssize_t sendOwned(Buffer && buffer, int flags = 0) override
```

[Defined in src/http/include/icy/http/connection.h:66](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L66)

Send an owned payload buffer to the peer.

Use this when the payload does not naturally outlive the current scope.

#### Reimplements

- [`SocketAdapter::sendOwned`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#sendowned-2)

---

<a id="sendheader"></a>

### sendHeader

`virtual`

```cpp
virtual ssize_t sendHeader()
```

[Defined in src/http/include/icy/http/connection.h:69](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L69)

Send the outdoing HTTP header.

#### Reimplemented by

- [`ServerConnection::sendHeader`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#sendheader-1)

---

<a id="close-27"></a>

### close

`virtual`

```cpp
virtual void close()
```

[Defined in src/http/include/icy/http/connection.h:73](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L73)

Close the connection and schedule the object for deferred deletion.

#### Reimplemented by

- [`ServerConnection::close`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#close-29)

---

<a id="markactive"></a>

### markActive

`virtual` `inline`

```cpp
virtual inline void markActive()
```

[Defined in src/http/include/icy/http/connection.h:77](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L77)

Marks the connection as active. [Server](https://auscaster.com/icey/docs/api-reference/icy-http-Server.md#server) connections override this to refresh the idle timer.

#### Reimplemented by

- [`ServerConnection::markActive`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#markactive-1)

---

<a id="beginstreaming"></a>

### beginStreaming

`virtual` `inline`

```cpp
virtual inline void beginStreaming()
```

[Defined in src/http/include/icy/http/connection.h:82](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L82)

Explicitly enter long-lived streaming mode. Base connections ignore this; server connections use it to disable keep-alive idle reaping while a response stream is active.

#### Reimplemented by

- [`ServerConnection::beginStreaming`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#beginstreaming-1)

---

<a id="endstreaming"></a>

### endStreaming

`virtual` `inline`

```cpp
virtual inline void endStreaming()
```

[Defined in src/http/include/icy/http/connection.h:85](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L85)

Exit long-lived streaming mode.

#### Reimplemented by

- [`ServerConnection::endStreaming`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#endstreaming-1)

---

<a id="closed-6"></a>

### closed

`const`

```cpp
bool closed() const
```

[Defined in src/http/include/icy/http/connection.h:88](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L88)

Return true if the connection is closed.

---

<a id="error-17"></a>

### error

`const`

```cpp
icy::Error error() const
```

[Defined in src/http/include/icy/http/connection.h:91](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L91)

Return the error object if any.

---

<a id="headerautosendenabled"></a>

### headerAutoSendEnabled

`const`

```cpp
bool headerAutoSendEnabled() const
```

[Defined in src/http/include/icy/http/connection.h:94](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L94)

Return true if headers should be automatically sent.

---

<a id="setheaderautosendenabled"></a>

### setHeaderAutoSendEnabled

```cpp
void setHeaderAutoSendEnabled(bool enabled)
```

[Defined in src/http/include/icy/http/connection.h:97](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L97)

Enable or disable automatic header emission for the next outgoing send path.

---

<a id="replaceadapter"></a>

### replaceAdapter

`virtual`

```cpp
virtual void replaceAdapter(std::unique_ptr< net::SocketAdapter > adapter)
```

[Defined in src/http/include/icy/http/connection.h:102](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L102)

Assign the new [ConnectionAdapter](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionAdapter.md#connectionadapter-1) and setup the chain. The flow is: [Connection](#connection-1) <-> [ConnectionAdapter](https://auscaster.com/icey/docs/api-reference/icy-http-ConnectionAdapter.md#connectionadapter-1) <-> Socket. Takes ownership of the adapter (deferred deletion via uv loop).

---

<a id="replaceadapter-1"></a>

### replaceAdapter

`virtual`

```cpp
virtual void replaceAdapter(std::nullptr_t)
```

[Defined in src/http/include/icy/http/connection.h:105](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L105)

Overload for nullptr (used in destructor to clear adapter).

---

<a id="secure"></a>

### secure

`const`

```cpp
bool secure() const
```

[Defined in src/http/include/icy/http/connection.h:108](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L108)

Return true if the connection uses TLS/SSL.

---

<a id="socket-6"></a>

### socket

```cpp
net::TCPSocket::Ptr & socket()
```

[Defined in src/http/include/icy/http/connection.h:111](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L111)

Return the underlying socket pointer.

---

<a id="adapter"></a>

### adapter

`const`

```cpp
net::SocketAdapter * adapter() const
```

[Defined in src/http/include/icy/http/connection.h:114](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L114)

Return the underlying adapter pointer.

---

<a id="request-5"></a>

### request

```cpp
Request & request()
```

[Defined in src/http/include/icy/http/connection.h:117](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L117)

The HTTP request headers.

---

<a id="response-2"></a>

### response

```cpp
Response & response()
```

[Defined in src/http/include/icy/http/connection.h:120](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L120)

The HTTP response headers.

---

<a id="incomingheader-1"></a>

### incomingHeader

`virtual`

```cpp
virtual http::Message * incomingHeader()
```

[Defined in src/http/include/icy/http/connection.h:123](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L123)

Returns the incoming HTTP message header (request or response depending on role).

#### Reimplemented by

- [`ClientConnection::incomingHeader`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#incomingheader)
- [`ServerConnection::incomingHeader`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#incomingheader-2)

---

<a id="outgoingheader-1"></a>

### outgoingHeader

`virtual`

```cpp
virtual http::Message * outgoingHeader()
```

[Defined in src/http/include/icy/http/connection.h:126](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L126)

Returns the outgoing HTTP message header (request or response depending on role).

#### Reimplemented by

- [`ClientConnection::outgoingHeader`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#outgoingheader)
- [`ServerConnection::outgoingHeader`](https://auscaster.com/icey/docs/api-reference/icy-http-ServerConnection.md#outgoingheader-2)

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14) | [`_socket`](#_socket-1)  |  |
| [`net::SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) * | [`_adapter`](#_adapter)  |  |
| [`Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6) | [`_request`](#_request-1)  |  |
| [`Response`](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3) | [`_response`](#_response-1)  |  |
| [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) | [`_error`](#_error-4)  |  |
| `bool` | [`_closed`](#_closed)  |  |
| `bool` | [`_shouldSendHeader`](#_shouldsendheader)  |  |

---

<a id="_socket-1"></a>

### _socket

```cpp
net::TCPSocket::Ptr _socket
```

Type: [`net::TCPSocket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-TCPSocket.md#ptr-14)

[Defined in src/http/include/icy/http/connection.h:140](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L140)

---

<a id="_adapter"></a>

### _adapter

```cpp
net::SocketAdapter * _adapter
```

Type: [`net::SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) *

[Defined in src/http/include/icy/http/connection.h:141](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L141)

---

<a id="_request-1"></a>

### _request

```cpp
Request _request
```

Type: [`Request`](https://auscaster.com/icey/docs/api-reference/icy-http-Request.md#request-6)

[Defined in src/http/include/icy/http/connection.h:142](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L142)

---

<a id="_response-1"></a>

### _response

```cpp
Response _response
```

Type: [`Response`](https://auscaster.com/icey/docs/api-reference/icy-http-Response.md#response-3)

[Defined in src/http/include/icy/http/connection.h:143](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L143)

---

<a id="_error-4"></a>

### _error

```cpp
icy::Error _error
```

Type: [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error)

[Defined in src/http/include/icy/http/connection.h:144](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L144)

---

<a id="_closed"></a>

### _closed

```cpp
bool _closed
```

[Defined in src/http/include/icy/http/connection.h:145](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L145)

---

<a id="_shouldsendheader"></a>

### _shouldSendHeader

```cpp
bool _shouldSendHeader
```

[Defined in src/http/include/icy/http/connection.h:146](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L146)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`setError`](#seterror-5) `virtual` | Set the internal error. Note: Setting the error does not [`close()`](#close-27) the connection. |
| `bool` | [`onSocketConnect`](#onsocketconnect-3) `virtual` `override` | [net::SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) interface |
| `bool` | [`onSocketRecv`](#onsocketrecv-3) `virtual` `override` | Called when data is received from the socket. Forwards the event to all registered receivers in priority order. |
| `bool` | [`onSocketError`](#onsocketerror-3) `virtual` `override` | Called when the socket encounters an error. Forwards the event to all registered receivers in priority order. |
| `bool` | [`onSocketClose`](#onsocketclose-2) `virtual` `override` | Called when the socket is closed. Forwards the event to all registered receivers in priority order. |

---

<a id="seterror-5"></a>

### setError

`virtual`

```cpp
virtual void setError(const icy::Error & err)
```

[Defined in src/http/include/icy/http/connection.h:131](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L131)

Set the internal error. Note: Setting the error does not [`close()`](#close-27) the connection.

---

<a id="onsocketconnect-3"></a>

### onSocketConnect

`virtual` `override`

```cpp
virtual bool onSocketConnect(net::Socket & socket) override
```

[Defined in src/http/include/icy/http/connection.h:134](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L134)

[net::SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) interface

#### Reimplements

- [`SocketAdapter::onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketconnect)

#### Reimplemented by

- [`ClientConnection::onSocketConnect`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#onsocketconnect-2)

---

<a id="onsocketrecv-3"></a>

### onSocketRecv

`virtual` `override`

```cpp
virtual bool onSocketRecv(net::Socket & socket, const MutableBuffer & buffer, const net::Address & peerAddress) override
```

[Defined in src/http/include/icy/http/connection.h:135](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L135)

Called when data is received from the socket. Forwards the event to all registered receivers in priority order. 
#### Returns
true to stop propagation to subsequent receivers.

#### Reimplements

- [`SocketAdapter::onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketrecv-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The socket that received data. |
| `buffer` | const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) & | The received data buffer. |
| `peerAddress` | const [`net::Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | Address of the sender. |

---

<a id="onsocketerror-3"></a>

### onSocketError

`virtual` `override`

```cpp
virtual bool onSocketError(net::Socket & socket, const icy::Error & error) override
```

[Defined in src/http/include/icy/http/connection.h:136](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L136)

Called when the socket encounters an error. Forwards the event to all registered receivers in priority order. 
#### Returns
true to stop propagation to subsequent receivers.

#### Reimplements

- [`SocketAdapter::onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketerror)

#### Reimplemented by

- [`ClientConnection::onSocketError`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#onsocketerror-2)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The socket that encountered the error. |
| `error` | const [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) & | [Error](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) details. |

---

<a id="onsocketclose-2"></a>

### onSocketClose

`virtual` `override`

```cpp
virtual bool onSocketClose(net::Socket & socket) override
```

[Defined in src/http/include/icy/http/connection.h:137](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L137)

Called when the socket is closed. Forwards the event to all registered receivers in priority order. 
#### Returns
true to stop propagation to subsequent receivers.

#### Reimplements

- [`SocketAdapter::onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#onsocketclose)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | [`net::Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) & | The socket that was closed. |

## Public Types

| Name | Description |
|------|-------------|
| [`Ptr`](#ptr-17)  |  |

---

<a id="ptr-17"></a>

### Ptr

```cpp
using Ptr = std::shared_ptr< Connection >
```

Type: std::shared_ptr< [`Connection`](#connection-1) >

[Defined in src/http/include/icy/http/connection.h:37](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/connection.h#L37)
