# SocketPacket

<a id="socketpacket"></a>

# SocketPacket

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

class SocketPacket
```

[Defined in src/net/include/icy/net/socket.h:200](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L200)

> **Inherits:** [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4)

Default packet type emitted by sockets.

[SocketPacket](#socketpacket) carries the remote peer address plus a borrowed view of the received byte buffer for zero-copy processing inside the receive callback.

The referenced packet buffer lifetime is only guaranteed for the duration of the receiver callback.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`SocketPacket`](#socketpacket-1) | `function` | Declared here |
| [`SocketPacket`](#socketpacket-2) | `function` | Declared here |
| [`packetInfo`](#packetinfo-4) | `function` | Declared here |
| [`~SocketPacket`](#socketpacket-3) | `function` | Declared here |
| [`print`](#print-8) | `function` | Declared here |
| [`clone`](#clone-10) | `function` | Declared here |
| [`read`](#read-5) | `function` | Declared here |
| [`write`](#write-19) | `function` | Declared here |
| [`className`](#classname-10) | `function` | Declared here |
| [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-5) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-6) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-7) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`~RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-8) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`clone`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#clone-3) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`copyData`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#copydata) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`read`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#read-2) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`write`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#write-14) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`data`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#data-4) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#size-7) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`className`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#classname-2) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`ownsBuffer`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#ownsbuffer) | `function` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`_data`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_data-2) | `variable` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`_size`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_size-2) | `variable` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`_owned`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_owned) | `variable` | Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4) |
| [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#operator-41) | `friend` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`opaque`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#opaque) | `variable` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`info`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#info) | `variable` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`flags`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#flags) | `variable` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-1) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-2) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#operator-42) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`clone`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#clone-1) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`~IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-3) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`read`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#read-1) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`write`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#write-4) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#size-1) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`hasData`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#hasdata) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`data`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#data-2) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`constData`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#constdata) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`className`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#classname-1) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |
| [`print`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#print) | `function` | Inherited from [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) |

## Inherited from [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-4)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-5) `inline` | Construct with borrowed (non-owning) buffer. |
| `function` | [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-6) `inline` | Construct with const data (copied, owning). |
| `function` | [`RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-7) `inline` | Copy constructor (always copies data). |
| `function` | [`~RawPacket`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#rawpacket-8) `virtual` | Defaulted destructor. |
| `function` | [`clone`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#clone-3) `virtual` `const` `inline` `override` |  |
| `function` | [`copyData`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#copydata) `virtual` `inline` | Copies data into an internally owned buffer, replacing any prior content. |
| `function` | [`read`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#read-2) `virtual` `inline` `override` | Reads from the buffer by copying its contents into an owned buffer. |
| `function` | [`write`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#write-14) `virtual` `const` `inline` `override` | Appends the packet data to the given output buffer. |
| `function` | [`data`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#data-4) `virtual` `const` `inline` `override` |  |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#size-7) `virtual` `const` `inline` `override` |  |
| `function` | [`className`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#classname-2) `virtual` `const` `inline` `override` | Returns the class name of this packet type for logging and diagnostics. |
| `function` | [`ownsBuffer`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#ownsbuffer) `const` `inline` |  |
| `variable` | [`_data`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_data-2)  |  |
| `variable` | [`_size`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_size-2)  |  |
| `variable` | [`_owned`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#_owned)  |  |

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

| Kind | Name | Description |
|------|------|-------------|
| `friend` | [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#operator-41) `inline` | [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) insertion operator; delegates to [print()](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#print). |
| `variable` | [`opaque`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#opaque)  | Optional type-safe context data. Use std::any_cast to retrieve. Lifetime of the stored value is tied to the packet's lifetime. |
| `variable` | [`info`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#info)  | Optional extra information about the packet. |
| `variable` | [`flags`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#flags)  | Provides basic information about the packet. |
| `function` | [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-1) `inline` |  |
| `function` | [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-2) `inline` | Copy constructor; clones the info object if present. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#operator-42) `inline` | Copy assignment; clones the info object if present. |
| `function` | [`clone`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#clone-1) `virtual` `const` | Returns a heap-allocated deep copy of this packet. |
| `function` | [`~IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket-3) `virtual` | Defaulted destructor. |
| `function` | [`read`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#read-1) `virtual` | Read/parse to the packet from the given input buffer. The number of bytes read is returned. |
| `function` | [`write`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#write-4) `virtual` `const` | Copy/generate to the packet given output buffer. The number of bytes written can be obtained from the buffer. |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#size-1) `virtual` `const` `inline` | The size of the packet in bytes. |
| `function` | [`hasData`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#hasdata) `virtual` `const` `inline` | Returns true if the packet has a non-null data pointer. |
| `function` | [`data`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#data-2) `virtual` `const` `inline` | The packet data pointer for buffered packets. |
| `function` | [`constData`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#constdata) `virtual` `const` `inline` | The const packet data pointer for buffered packets. |
| `function` | [`className`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#classname-1) `virtual` `const` | Returns the class name of this packet type for logging and diagnostics. |
| `function` | [`print`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#print) `virtual` `const` `inline` | Prints a human-readable representation to the given stream. |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`SocketPacket`](#socketpacket-1) `inline` | Constructs a [SocketPacket](#socketpacket) wrapping the received buffer. |
|  | [`SocketPacket`](#socketpacket-2) `inline` | Copy constructor; shares the underlying buffer reference. |
| [`PacketInfo`](https://auscaster.com/icey/docs/api-reference/icy-net-PacketInfo.md#packetinfo) * | [`packetInfo`](#packetinfo-4) `const` `inline` | Returns the [PacketInfo](https://auscaster.com/icey/docs/api-reference/icy-net-PacketInfo.md#packetinfo) for this socket packet. |
|  | [`~SocketPacket`](#socketpacket-3) `virtual` `noexcept` | Defaulted destructor. |
| `void` | [`print`](#print-8) `virtual` `const` `inline` | Prints a one-line description of the packet to `os`. |
| std::unique_ptr< [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) > | [`clone`](#clone-10) `virtual` `const` `inline` | Returns a heap-allocated copy of this [SocketPacket](#socketpacket). |
| `ssize_t` | [`read`](#read-5) `virtual` `inline` | Not supported; always throws std::logic_error. |
| `void` | [`write`](#write-19) `virtual` `const` `inline` | Appends the packet payload to `buf`. |
| `const char *` | [`className`](#classname-10) `virtual` `const` `inline` |  |

---

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

### SocketPacket

`inline`

```cpp
inline SocketPacket(const Socket::Ptr & socket, const MutableBuffer & buffer, const Address & peerAddress)
```

[Defined in src/net/include/icy/net/socket.h:210](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L210)

Constructs a [SocketPacket](#socketpacket) wrapping the received buffer.

The buffer data pointer remains valid only for the duration of the enclosing receive callback; do not retain references beyond that scope.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `socket` | const [`Socket::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-net-Socket.md#ptr-9) & | Shared pointer to the receiving socket. |
| `buffer` | const [`MutableBuffer`](https://auscaster.com/icey/docs/api-reference/icy-MutableBuffer.md#mutablebuffer-6) & | View of the raw received bytes. |
| `peerAddress` | const [`Address`](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) & | [Address](https://auscaster.com/icey/docs/api-reference/icy-net-Address.md#address) of the remote sender. |

---

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

### SocketPacket

`inline`

```cpp
inline SocketPacket(const SocketPacket & that)
```

[Defined in src/net/include/icy/net/socket.h:218](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L218)

Copy constructor; shares the underlying buffer reference.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `that` | const [`SocketPacket`](#socketpacket) & | Source [SocketPacket](#socketpacket) to copy. |

---

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

### packetInfo

`const` `inline`

```cpp
inline PacketInfo * packetInfo() const
```

[Defined in src/net/include/icy/net/socket.h:225](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L225)

Returns the [PacketInfo](https://auscaster.com/icey/docs/api-reference/icy-net-PacketInfo.md#packetinfo) for this socket packet. 
#### Returns
Pointer to the associated [PacketInfo](https://auscaster.com/icey/docs/api-reference/icy-net-PacketInfo.md#packetinfo) (never null for a valid packet).

---

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

### ~SocketPacket

`virtual` `noexcept`

```cpp
virtual ~SocketPacket() noexcept = default
```

[Defined in src/net/include/icy/net/socket.h:230](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L230)

Defaulted destructor.

---

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

### print

`virtual` `const` `inline`

```cpp
virtual inline void print(std::ostream & os) const
```

[Defined in src/net/include/icy/net/socket.h:234](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L234)

Prints a one-line description of the packet to `os`.

#### Reimplements

- [`IPacket::print`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#print)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `os` | `std::ostream &` | Output stream to write to. |

---

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

### clone

`virtual` `const` `inline`

```cpp
virtual inline std::unique_ptr< IPacket > clone() const
```

[Defined in src/net/include/icy/net/socket.h:240](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L240)

Returns a heap-allocated copy of this [SocketPacket](#socketpacket).

#### Reimplements

- [`RawPacket::clone`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#clone-3)

---

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

### read

`virtual` `inline`

```cpp
virtual inline ssize_t read(const ConstBuffer &)
```

[Defined in src/net/include/icy/net/socket.h:243](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L243)

Not supported; always throws std::logic_error.

#### Reimplements

- [`RawPacket::read`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#read-2)

---

<a id="write-19"></a>

### write

`virtual` `const` `inline`

```cpp
virtual inline void write(Buffer & buf) const
```

[Defined in src/net/include/icy/net/socket.h:251](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L251)

Appends the packet payload to `buf`.

#### Reimplements

- [`RawPacket::write`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#write-14)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `buf` | [`Buffer`](https://auscaster.com/icey/docs/api-reference/base.md#buffer) & | Destination buffer to append raw bytes to. |

---

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

### className

`virtual` `const` `inline`

```cpp
virtual inline const char * className() const
```

[Defined in src/net/include/icy/net/socket.h:258](https://github.com/auscaster/icey/blob/main/src/net/include/icy/net/socket.h#L258)

#### Returns
The string "SocketPacket".

#### Reimplements

- [`RawPacket::className`](https://auscaster.com/icey/docs/api-reference/icy-RawPacket.md#classname-2)
