# SocketEmitter

<a id="socketemitter"></a>

# SocketEmitter

```cpp
#include <icy/net/socketemitter.h>

class SocketEmitter
```

[Defined in src/net/include/icy/net/socketemitter.h:32](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L32)

> **Inherits:** [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter)
> **Subclassed by:** [`WebSocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-http-ws-WebSocketAdapter.md#websocketadapter), [`PacketSocketEmitter`](https://auscaster.com/icey/docs/api-reference/icy-net-PacketSocketEmitter.md#packetsocketemitter)

[SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) that exposes socket events as signals.

Aside from adding a signal interface, the class wraps the underlying socket instance and is designed to be used much like a `std::unique_ptr` by overriding the `->` operator.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`Connect`](#connect-4) | `variable` | Declared here |
| [`Recv`](#recv) | `variable` | Declared here |
| [`Error`](#error-13) | `variable` | Declared here |
| [`Close`](#close-20) | `variable` | Declared here |
| [`impl`](#impl) | `variable` | Declared here |
| [`SocketEmitter`](#socketemitter-1) | `function` | Declared here |
| [`SocketEmitter`](#socketemitter-2) | `function` | Declared here |
| [`~SocketEmitter`](#socketemitter-3) | `function` | Declared here |
| [`addReceiver`](#addreceiver-1) | `function` | Declared here |
| [`removeReceiver`](#removereceiver-1) | `function` | Declared here |
| [`swap`](#swap-11) | `function` | Declared here |
| [`as`](#as) | `function` | Declared here |
| [`operator->`](#operator-180) | `function` | Declared here |
| [`onSocketConnect`](#onsocketconnect-1) | `function` | Declared here |
| [`onSocketRecv`](#onsocketrecv-2) | `function` | Declared here |
| [`onSocketError`](#onsocketerror-1) | `function` | Declared here |
| [`onSocketClose`](#onsocketclose-1) | `function` | 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` |  |

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &)> | [`Connect`](#connect-4)  | Signals that the socket is connected. |
| [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &, const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) &, const [`Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) &)> | [`Recv`](#recv)  | Signals when data is received by the socket. |
| [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &, const [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) &)> | [`Error`](#error-13)  | Signals that the socket is closed in error. This signal will be sent just before the Closed signal. |
| [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &)> | [`Close`](#close-20)  | Signals that the underlying socket is closed. |
| [`Socket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#ptr-9) | [`impl`](#impl)  | Pointer to the underlying socket. Sent data will be proxied to this socket. |

---

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

### Connect

```cpp
LocalSignal< bool(Socket &)> Connect
```

Type: [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &)>

[Defined in src/net/include/icy/net/socketemitter.h:48](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L48)

Signals that the socket is connected.

---

<a id="recv"></a>

### Recv

```cpp
LocalSignal< bool(Socket &, const MutableBuffer &, const Address &)> Recv
```

Type: [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &, const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) &, const [`Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) &)>

[Defined in src/net/include/icy/net/socketemitter.h:51](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L51)

Signals when data is received by the socket.

---

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

### Error

```cpp
LocalSignal< bool(Socket &, const icy::Error &)> Error
```

Type: [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &, const [`icy::Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) &)>

[Defined in src/net/include/icy/net/socketemitter.h:56](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L56)

Signals that the socket is closed in error. This signal will be sent just before the Closed signal.

---

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

### Close

```cpp
LocalSignal< bool(Socket &)> Close
```

Type: [`LocalSignal`](https://auscaster.com/icey/docs/api-reference/base.md#localsignal)< bool([`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) &)>

[Defined in src/net/include/icy/net/socketemitter.h:59](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L59)

Signals that the underlying socket is closed.

---

<a id="impl"></a>

### impl

```cpp
Socket::Ptr impl
```

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

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

Pointer to the underlying socket. Sent data will be proxied to this socket.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`SocketEmitter`](#socketemitter-1)  | Creates the [SocketEmitter](#socketemitter) and optionally attaches it to a socket. If `socket` is provided, this emitter registers itself as a receiver. |
|  | [`SocketEmitter`](#socketemitter-2)  | Copy constructor; copies all signal connections and attaches to the same socket. |
|  | [`~SocketEmitter`](#socketemitter-3) `virtual` `noexcept` | Destroys the [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter). |
| `void` | [`addReceiver`](#addreceiver-1) `virtual` `override` | Attaches a [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) as a receiver; wires it to all four socket signals. |
| `void` | [`removeReceiver`](#removereceiver-1) `virtual` `override` | Detaches a [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) from all four socket signals. |
| `void` | [`swap`](#swap-11) `virtual` | Replaces the underlying socket with `socket`. |
| `T *` | [`as`](#as) `inline` | Returns the underlying socket cast to type T, or nullptr if the cast fails. |
| [`Socket`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#socket-1) * | [`operator->`](#operator-180) `const` `inline` | Returns a raw pointer to the underlying socket for direct method access. Follows shared_ptr semantics; the caller must not delete the returned pointer. |

---

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

### SocketEmitter

```cpp
SocketEmitter(const Socket::Ptr & socket = nullptr)
```

[Defined in src/net/include/icy/net/socketemitter.h:38](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L38)

Creates the [SocketEmitter](#socketemitter) and optionally attaches it to a socket. If `socket` is provided, this emitter registers itself as a receiver.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | const [`Socket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#ptr-9) & | Optional socket to attach to; pass nullptr to attach later via [swap()](#swap-11). |

---

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

### SocketEmitter

```cpp
SocketEmitter(const SocketEmitter & that)
```

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

Copy constructor; copies all signal connections and attaches to the same socket.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `that` | const [`SocketEmitter`](#socketemitter) & | The [SocketEmitter](#socketemitter) to copy from. |

---

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

### ~SocketEmitter

`virtual` `noexcept`

```cpp
virtual ~SocketEmitter() noexcept
```

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

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

---

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

### addReceiver

`virtual` `override`

```cpp
virtual void addReceiver(SocketAdapter * adapter) override
```

[Defined in src/net/include/icy/net/socketemitter.h:63](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L63)

Attaches a [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) as a receiver; wires it to all four socket signals.

#### Reimplements

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `adapter` | [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) * | The adapter to attach; its priority determines signal ordering. |

---

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

### removeReceiver

`virtual` `override`

```cpp
virtual void removeReceiver(SocketAdapter * adapter) override
```

[Defined in src/net/include/icy/net/socketemitter.h:67](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L67)

Detaches a [SocketAdapter](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) from all four socket signals.

#### Reimplements

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

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `adapter` | [`SocketAdapter`](https://auscaster.com/icey/docs/api-reference/icy-net-SocketAdapter.md#socketadapter) * | The adapter to detach. |

---

<a id="swap-11"></a>

### swap

`virtual`

```cpp
virtual void swap(const Socket::Ptr & socket)
```

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

Replaces the underlying socket with `socket`.

Throws std::logic_error if the emitter already has an attached socket.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | const [`Socket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#ptr-9) & | The new socket to attach. |

---

<a id="as"></a>

### as

`inline`

```cpp
template<class T> inline T * as()
```

[Defined in src/net/include/icy/net/socketemitter.h:79](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L79)

Returns the underlying socket cast to type T, or nullptr if the cast fails. 
#### Returns
Pointer to the socket as T, or nullptr on type mismatch.

---

<a id="operator-180"></a>

### operator->

`const` `inline`

```cpp
inline Socket * operator->() const
```

[Defined in src/net/include/icy/net/socketemitter.h:87](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L87)

Returns a raw pointer to the underlying socket for direct method access. Follows shared_ptr semantics; the caller must not delete the returned pointer. 
#### Returns
Raw pointer to the socket (never null if a socket was attached).

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `bool` | [`onSocketConnect`](#onsocketconnect-1) `virtual` `override` | Forwards the connect event to chained adapters, then fires the Connect signal. |
| `bool` | [`onSocketRecv`](#onsocketrecv-2) `virtual` `override` | Forwards the recv event to chained adapters, then fires the Recv signal. |
| `bool` | [`onSocketError`](#onsocketerror-1) `virtual` `override` | Forwards the error event to chained adapters, then fires the [Error](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) signal. |
| `bool` | [`onSocketClose`](#onsocketclose-1) `virtual` `override` | Forwards the close event to chained adapters, then fires the Close signal. |

---

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

### onSocketConnect

`virtual` `override`

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

[Defined in src/net/include/icy/net/socketemitter.h:98](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L98)

Forwards the connect event to chained adapters, then fires the Connect signal.

#### Reimplements

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

#### Reimplemented by

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

---

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

### onSocketRecv

`virtual` `override`

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

[Defined in src/net/include/icy/net/socketemitter.h:100](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L100)

Forwards the recv event to chained adapters, then fires the Recv signal.

#### Reimplements

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

#### Reimplemented by

- [`WebSocketAdapter::onSocketRecv`](https://auscaster.com/icey/docs/api-reference/icy-http-ws-WebSocketAdapter.md#onsocketrecv-6)

---

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

### onSocketError

`virtual` `override`

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

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

Forwards the error event to chained adapters, then fires the [Error](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) signal.

#### Reimplements

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

---

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

### onSocketClose

`virtual` `override`

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

[Defined in src/net/include/icy/net/socketemitter.h:104](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socketemitter.h#L104)

Forwards the close event to chained adapters, then fires the Close signal.

#### Reimplements

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

#### Reimplemented by

- [`WebSocketAdapter::onSocketClose`](https://auscaster.com/icey/docs/api-reference/icy-http-ws-WebSocketAdapter.md#onsocketclose-4)
