# Pipe

<a id="pipe"></a>

# Pipe

```cpp
#include <icy/pipe.h>

class Pipe
```

[Defined in src/base/include/icy/pipe.h:27](https://github.com/auscaster/icey/blob/main/src/base/include/icy/pipe.h#L27)

> **Inherits:** [`Stream< uv_pipe_t >`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream)

Named pipe / stdio stream built on `uv_pipe_t`.

Suitable for inter-process communication and for wrapping process stdio (stdin/stdout/stderr). IPC mode allows passing stream handles between processes over the pipe.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`Pipe`](#pipe-1) | `function` | Declared here |
| [`~Pipe`](#pipe-2) | `function` | Declared here |
| [`init`](#init-3) | `function` | Declared here |
| [`readStart`](#readstart) | `function` | Declared here |
| [`Read`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#read-3) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-1) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`~Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-2) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#close-5) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`shutdown`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#shutdown) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`write`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-16) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`writeOwned`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#writeowned) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`setHighWaterMark`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#sethighwatermark) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`write`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-17) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-3) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`_buffer`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_buffer-1) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`_started`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_started-1) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`_highWaterMark`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_highwatermark) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`_writeReqFree`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_writereqfree) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`_ownedWriteReqFree`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_ownedwritereqfree) | `variable` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`readStart`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#readstart-1) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`readStop`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#readstop) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`onRead`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#onread) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`allocWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#allocwritereq) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`freeWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#freewritereq) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`allocOwnedWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#allocownedwritereq) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`freeOwnedWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#freeownedwritereq) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`canQueueWrite`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#canqueuewrite) | `function` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#handle-1) | `typedef` | Inherited from [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) |
| [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-7) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`~Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-8) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`init`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#init-8) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#invoke) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`invokeOrThrow`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#invokeorthrow) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#close-18) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`ref`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#ref) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`unref`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#unref) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`initialized`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#initialized-1) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`active`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#active-3) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`closing`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#closing-1) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`closed`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#closed-2) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`error`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#error-11) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`setError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#seterror-1) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`setUVError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setuverror) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`setAndThrowError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setandthrowerror) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`throwLastError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#throwlasterror) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`loop`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#loop-3) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`reset`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#reset-12) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`get`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#get-15) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`tid`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#tid-2) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#context-5) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`rawPtr`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#rawptr) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`setCloseCleanup`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setclosecleanup) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`clearCloseCleanup`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#clearclosecleanup) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`assertThread`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#assertthread) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`_loop`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_loop) | `variable` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`_context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_context-1) | `variable` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`_tid`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_tid) | `variable` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`_error`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_error-3) | `variable` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`onError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#onerror) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`onClose`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#onclose) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-9) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#operator-171) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-10) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#operator-172) | `function` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |
| [`Type`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#type-10) | `typedef` | Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6) |

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

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`Read`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#read-3)  | Emitted when data has been received from the peer. |
| `function` | [`Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-1) `inline` | Construct the stream bound to `loop` with a 64 KiB read buffer. |
| `function` | [`~Stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-2) `virtual` `inline` | Destroy the stream, stopping reads and freeing pooled write requests. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#close-5) `virtual` `inline` `override` | Closes and resets the stream handle. This will close the active socket/pipe and destroy the handle. |
| `function` | [`shutdown`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#shutdown) `inline` | Send a TCP/pipe shutdown request to the connected peer. |
| `function` | [`write`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-16) `inline` | Write `len` bytes from `data` to the stream. |
| `function` | [`writeOwned`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#writeowned) `inline` | Write an owned payload buffer to the stream. |
| `function` | [`setHighWaterMark`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#sethighwatermark) `inline` | Set the high water mark for the write queue (default 16MB). When the write queue exceeds this size, [write()](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-16) returns false. |
| `function` | [`write`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-17) `inline` | Write `len` bytes from `data` together with a stream handle over an IPC pipe (uses `uv_write2`). |
| `function` | [`stream`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream-3) `inline` | Return the underlying `uv_stream_t` pointer cast from the native handle. |
| `variable` | [`_buffer`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_buffer-1)  |  |
| `variable` | [`_started`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_started-1)  |  |
| `variable` | [`_highWaterMark`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_highwatermark)  | 16MB default write queue limit |
| `variable` | [`_writeReqFree`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_writereqfree)  | Freelist for write requests. |
| `variable` | [`_ownedWriteReqFree`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#_ownedwritereqfree)  | Freelist for owned write requests. |
| `function` | [`readStart`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#readstart-1) `virtual` `inline` | Begin reading from the stream by registering libuv read callbacks. |
| `function` | [`readStop`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#readstop) `virtual` `inline` | Stop reading from the stream. |
| `function` | [`onRead`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#onread) `virtual` `inline` | Called by `handleRead` when `len` bytes of `data` arrive. |
| `function` | [`allocWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#allocwritereq) `inline` | Return a `uv_write_t` from the freelist, or allocate a new one if the pool is empty. |
| `function` | [`freeWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#freewritereq) `inline` | Return `req` to the freelist, or delete it if the pool is at capacity. |
| `function` | [`allocOwnedWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#allocownedwritereq) `inline` |  |
| `function` | [`freeOwnedWriteReq`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#freeownedwritereq) `inline` |  |
| `function` | [`canQueueWrite`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#canqueuewrite) `inline` |  |
| `typedef` | [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#handle-1)  |  |

## Inherited from [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-7) `inline` | Construct the handle bound to the given event loop. |
| `function` | [`~Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-8) `virtual` `inline` |  |
| `function` | [`init`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#init-8) `inline` | Initialize the underlying libuv handle by calling `f` with the loop, the raw handle pointer, and any additional `args`. |
| `function` | [`invoke`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#invoke) `inline` | Invoke a libuv function `f` with `args` on the initialized handle. |
| `function` | [`invokeOrThrow`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#invokeorthrow) `inline` | Invoke a libuv function `f` with `args`, throwing on failure. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#close-18) `virtual` `inline` | Close and destroy the handle. |
| `function` | [`ref`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#ref) `inline` | Re-reference the handle with the event loop after a previous [`unref()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#unref). |
| `function` | [`unref`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#unref) `inline` | Unreference the handle from the event loop. |
| `function` | [`initialized`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#initialized-1) `const` `inline` | Return `true` if the handle has been successfully initialized via [`init()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#init-8). |
| `function` | [`active`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#active-3) `virtual` `const` `inline` | Return `true` when the handle is active (libuv `uv_is_active`). |
| `function` | [`closing`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#closing-1) `virtual` `const` `inline` | Return `true` if `uv_close` has been called and the handle is awaiting its close callback (libuv `uv_is_closing`). |
| `function` | [`closed`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#closed-2) `virtual` `const` `inline` | Return `true` if the handle has been fully closed (context released). |
| `function` | [`error`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#error-11) `const` `inline` | Return the last error set on this handle, or a default-constructed [`Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) if no error has occurred. |
| `function` | [`setError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#seterror-1) `virtual` `inline` | Set the error state and invoke [`onError()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#onerror). |
| `function` | [`setUVError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setuverror) `inline` | Translate a libuv error code into an [`Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) and call [`setError()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#seterror-1). |
| `function` | [`setAndThrowError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setandthrowerror) `inline` | Set the error state from a libuv error code and throw a `std::runtime_error`. |
| `function` | [`throwLastError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#throwlasterror) `inline` | Throw a `std::runtime_error` if the handle currently holds an error. |
| `function` | [`loop`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#loop-3) `const` `inline` | Return the event loop this handle is bound to. |
| `function` | [`reset`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#reset-12) `inline` | Close the current handle (if open) and allocate a fresh [`Context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Context.md#context-2), leaving the handle ready to be re-initialized via [`init()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#init-8). |
| `function` | [`get`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#get-15) `const` `inline` | Return the raw libuv handle pointer cast to [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-6). |
| `function` | [`tid`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#tid-2) `const` `inline` | Return the ID of the thread that constructed this handle. |
| `function` | [`context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#context-5) `const` `inline` | Return the raw [`Context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Context.md#context-2) that owns the libuv handle memory. |
| `function` | [`rawPtr`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#rawptr) `const` `inline` | Return the raw libuv handle pointer without retaining the [`Context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Context.md#context-2). |
| `function` | [`setCloseCleanup`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#setclosecleanup) `inline` |  |
| `function` | [`clearCloseCleanup`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#clearclosecleanup) `inline` |  |
| `function` | [`assertThread`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#assertthread) `const` `inline` | Throw `std::logic_error` if called from any thread other than the thread that constructed this handle. |
| `variable` | [`_loop`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_loop)  |  |
| `variable` | [`_context`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_context-1)  |  |
| `variable` | [`_tid`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_tid)  |  |
| `variable` | [`_error`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#_error-3)  |  |
| `function` | [`onError`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#onerror) `virtual` `inline` | Called by [`setError()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#seterror-1) after the error state has been updated. |
| `function` | [`onClose`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#onclose) `virtual` `inline` | Called by [`close()`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#close-18) after the context has been released. |
| `function` | [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-9)  | NonCopyable and NonMovable. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#operator-171)  | Deleted assignment operator. |
| `function` | [`Handle`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#handle-10)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#operator-172)  | Deleted assignment operator. |
| `typedef` | [`Type`](https://auscaster.com/icey/docs/api-reference/icy-uv-Handle.md#type-10)  | Define the native handle type. |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Pipe`](#pipe-1)  | Construct a [`Pipe`](#pipe) bound to `loop` without initializing the libuv handle. |
|  | [`~Pipe`](#pipe-2) `virtual` | Destroy the pipe, stopping reads and closing the handle. |
| `void` | [`init`](#init-3) `virtual` | Initialize the underlying `uv_pipe_t` handle. |
| `bool` | [`readStart`](#readstart) `virtual` `override` | Start reading from the pipe. |

---

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

### Pipe

```cpp
Pipe(uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/base/include/icy/pipe.h:35](https://github.com/auscaster/icey/blob/main/src/base/include/icy/pipe.h#L35)

Construct a [`Pipe`](#pipe) bound to `loop` without initializing the libuv handle.

Call [`init()`](#init-3) before performing any I/O.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to associate with. Defaults to the process-wide default loop. |

---

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

### ~Pipe

`virtual`

```cpp
virtual ~Pipe()
```

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

Destroy the pipe, stopping reads and closing the handle.

---

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

### init

`virtual`

```cpp
virtual void init(bool ipc = false)
```

[Defined in src/base/include/icy/pipe.h:46](https://github.com/auscaster/icey/blob/main/src/base/include/icy/pipe.h#L46)

Initialize the underlying `uv_pipe_t` handle.

Must be called before [`readStart()`](#readstart) or any write operations.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `ipc` | `bool` | Set to `true` to enable IPC mode, which allows sending and receiving stream handles alongside data via [`write()`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#write-16). |

---

<a id="readstart"></a>

### readStart

`virtual` `override`

```cpp
virtual bool readStart() override
```

[Defined in src/base/include/icy/pipe.h:54](https://github.com/auscaster/icey/blob/main/src/base/include/icy/pipe.h#L54)

Start reading from the pipe.

Delegates to `Stream<uv_pipe_t>::readStart()`. Emits the `Read` signal as data arrives.

#### Returns
`true` if `uv_read_start` was called successfully.

#### Reimplements

- [`Stream::readStart`](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#readstart-1)
