You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(tcp-connector): enhance Embassy TCP transport with futures support and connection handling improvements
* feat(tcp-connector): add runtime smoke tests for Embassy TCP functionality
* feat(tcp-connector): add embassy loopback tests and clippy checks for TCP connector
* feat(tcp-connector): add changelog for aimdb-tcp-connector crate
* feat(tcp-connector): update embassy-net-driver-channel version and improve time scaling in tests
* feat(tcp-connector): bound embassy loopback tests with a wall-clock watchdog
The loopback harness polls two non-terminating embassy-net stacks in the
background, so a transport regression or a dropped crossover packet would
leave `block_on` pending until the outer CI timeout instead of failing the
test. Race the foreground/background `select` against a 20s wall-clock
watchdog that re-arms its waker each poll (so the deadline is observed even
when the stacks would otherwise park) and panics with a clear message.
Addresses review feedback on #179.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tcp-connector): expose TcpListener::accept_on and cover the pooled N=2 path
The Embassy loopback concurrency test used two unrelated `TcpListener<1>` on
different ports, so it never touched `with_buffers` construction or same-port
fan-out. Rework it to stand up one `TcpListener::<2>::with_buffers(...)` on a
single port and dial it with two clients.
Reaching the N>1 pool from an integration test required a public accept: the
`Listener` impl is `N=1`-only and the pooled path (`into_server_futures`/
`serve_socket_slot`) was private, reachable only through `TcpServer<N>` + the
AimX session engine. Add `TcpListener::<N>::accept_on(index)` and factor the
accept body — previously duplicated between the `N=1` `Listener` impl and the
server workers — into a shared `accept_on_slot`. Side benefit: `with_buffers`
can now be driven directly instead of only through `TcpServer`.
Addresses review feedback on #179.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tcp-connector): enhance socket recycling and cancellation handling in accept logic
---------
Co-authored-by: test <test@test.local>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
All notable changes to the `aimdb-tcp-connector` crate will be documented in this file.
4
+
5
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+
## [Unreleased]
9
+
10
+
### Added
11
+
12
+
-**New crate — the length-prefixed TCP transport for AimDB remote access (AimX over TCP, refs #121).** Contributes the `Dialer`/`Listener`/`Connection` transport triple plus thin `TcpClient`/`TcpServer` sugar; the AimX codec + dispatch and the runtime-neutral session engines (`run_client`/`serve`) are reused from `aimdb-core`. Every AimX envelope is framed as a `u32` big-endian length prefix. Two runtime halves:
13
+
-**`tokio-runtime`** (std, host/gateway) — TCP transport over `tokio::net`.
14
+
-**`embassy-runtime`** (`no_std + alloc`, MCU) — an explicit pool of caller-buffered `embassy-net` sockets, one accept/session worker per slot (`TcpServer::<N>::with_buffers`), with socket recycling across reconnects. A synchronous `accept()` failure (e.g. a port-0 endpoint rejected as `InvalidPort`) yields instead of spinning the cooperative executor.
15
+
-**Embassy TCP runtime smoke test** (`_test-embassy-loopback`) — exercises the socket pool over two real `embassy-net` stacks wired by an in-memory driver-channel crossover: recycle → re-accept, concurrent accept slots, and dialer redial after a failed connect / dropped link.
0 commit comments