Skip to content

Class TcpConnection

Namespace: DotBoxD.Transports.Tcp
Assembly: DotBoxD.Transports.Tcp.dll

TCP-based connection implementation.

public sealed class TcpConnection : IRpcFrameChannel, IRpcValueTaskChannel, IRpcChannel, IAsyncDisposable

objectTcpConnection

IRpcFrameChannel, IRpcValueTaskChannel, IRpcChannel, IAsyncDisposable

object.Equals(object), object.Equals(object, object), object.GetHashCode(), object.GetType(), object.ReferenceEquals(object, object), object.ToString()

public TcpConnection(TcpClient client)

client TcpClient

Creates a TCP connection with an idle bound for both first-byte and body reads. Pass System.Threading.Timeout.InfiniteTimeSpan to disable; null uses the default.

public TcpConnection(TcpClient client, TimeSpan? frameReadIdleTimeout)

client TcpClient

frameReadIdleTimeout TimeSpan?

Default idle timeout applied to frame reads (30 seconds).

public static readonly TimeSpan DefaultFrameReadIdleTimeout

TimeSpan

Best-effort liveness hint combining disposal with the socket’s last known state. This does not probe the wire; rely on I/O exceptions for authoritative connection state.

public bool IsConnected { get; }

bool

Gets a string representation of the remote endpoint.

public string RemoteEndpoint { get; }

string

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.

public ValueTask DisposeAsync()

ValueTask

A task that represents the asynchronous dispose operation.

Receives a framed message. The caller owns the returned DotBoxD.Services.Buffers.Payload and must dispose it. A payload with DotBoxD.Services.Buffers.Payload.Length of 0 signals the channel was closed.

public Task<Payload> ReceiveAsync(CancellationToken ct = default)

ct CancellationToken

Task<Payload>

ReceiveFrameValueAsync(CancellationToken)

Section titled “ ReceiveFrameValueAsync(CancellationToken)”

Receives a complete frame whose ownership transfers to the caller on successful completion.

public ValueTask<RpcFrame> ReceiveFrameValueAsync(CancellationToken ct = default)

ct CancellationToken

ValueTask<RpcFrame>

The caller must consume the returned logical frame exactly once by calling either DotBoxD.Services.Transport.RpcFrame.DetachPayload or DotBoxD.Services.Transport.RpcFrame.Dispose.

public ValueTask<Payload> ReceiveValueAsync(CancellationToken ct = default)

ct CancellationToken

ValueTask<Payload>

SendAsync(ReadOnlyMemory<byte>, CancellationToken)

Section titled “ SendAsync(ReadOnlyMemory<byte>, CancellationToken)”

Sends a framed message over the channel.

public Task SendAsync(ReadOnlyMemory<byte> data, CancellationToken ct = default)

data ReadOnlyMemory<byte>

ct CancellationToken

Task

SendFrameValueAsync(PooledBufferWriter, CancellationToken)

Section titled “ SendFrameValueAsync(PooledBufferWriter, CancellationToken)”

Sends a complete pooled frame and transfers its ownership to the channel.

public ValueTask SendFrameValueAsync(PooledBufferWriter frame, CancellationToken ct = default)

frame PooledBufferWriter

ct CancellationToken

ValueTask

Ownership transfers immediately when this invocation returns a System.Threading.Tasks.ValueTask, including an already faulted or canceled result. The channel then owns frame through terminal success, failure, or cancellation and must dispose it; the caller must not read, detach, or dispose it. If the invocation throws synchronously, ownership remains with the caller, which must dispose the frame. The implementation must drop its raw writer reference when the returned operation terminates.

ArgumentNullException

frame is null.

SendValueAsync(ReadOnlyMemory<byte>, CancellationToken)

Section titled “ SendValueAsync(ReadOnlyMemory<byte>, CancellationToken)”
public ValueTask SendValueAsync(ReadOnlyMemory<byte> data, CancellationToken ct = default)

data ReadOnlyMemory<byte>

ct CancellationToken

ValueTask