# `Quic.Congestion.NewReno`
[🔗](https://github.com/gsmlg-dev/http_fetch/blob/v1.0.0-rc.9/apps/elixir_quic/lib/quic/congestion/new_reno.ex#L1)

Pure RFC 9002-style NewReno congestion controller.

Admission is reservation based: queued datagrams consume congestion credit until
they are definitively failed, acknowledged, or declared lost.

# `initial_state`

```elixir
@type initial_state() :: %Quic.Congestion.NewReno{
  acked_bytes: 0,
  bytes_in_flight: 0,
  cwnd: term(),
  max_datagram_size: term(),
  mss: number(),
  ssthresh: term()
}
```

# `t`

```elixir
@type t() :: %Quic.Congestion.NewReno{
  acked_bytes: term(),
  bytes_in_flight: term(),
  cwnd: term(),
  max_datagram_size: term(),
  mss: term(),
  ssthresh: term()
}
```

# `available?`

```elixir
@spec available?(t(), non_neg_integer()) :: boolean()
```

# `new`

```elixir
@spec new(keyword()) :: initial_state()
```

# `on_ack`

```elixir
@spec on_ack(t(), non_neg_integer()) :: t()
```

# `on_loss`

```elixir
@spec on_loss(t(), non_neg_integer()) :: t()
```

# `pacing_delay`

```elixir
@spec pacing_delay(t(), non_neg_integer()) :: non_neg_integer()
```

# `release`

```elixir
@spec release(t(), non_neg_integer()) :: t()
```

# `reserve`

```elixir
@spec reserve(t(), non_neg_integer()) :: {:ok, t()} | {:error, :congestion_limited}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
