Compiled new

This commit is contained in:
2026-08-16 19:52:23 -03:00
parent 2ff2cdf0c5
commit 7ea221a99c
6 changed files with 19 additions and 7 deletions
+15 -3
View File
@@ -507,6 +507,12 @@ path probe: upload=32768 download=1400 persistent=true
`adaptiveSizer` keeps one instance per direction plus two landmarks: `good`, the `adaptiveSizer` keeps one instance per direction plus two landmarks: `good`, the
largest size known to work, and `bad`, the smallest known to fail. largest size known to work, and `bad`, the smallest known to fail.
An I/O timeout is different from a size failure. It is a hard tunnel boundary:
the timed-out socket is closed and the error is returned immediately. The client
does not replay that request on the same logical session and does not walk every
smaller record or batch size. The application's next connection creates a new
tunnel. Other non-timeout transport failures can still use the adaptation below.
**On failure** at the current size: **On failure** at the current size:
* record `bad = min(bad, attempted)`, * record `bad = min(bad, attempted)`,
@@ -1208,9 +1214,10 @@ manual tuning makes things worse.
`adaptive download batch: N -> N/2`, the path cannot sustain that depth. `adaptive download batch: N -> N/2`, the path cannot sustain that depth.
* **Streams die mid-transfer, or nothing loads at all.** Set `Reconnect every` * **Streams die mid-transfer, or nothing loads at all.** Set `Reconnect every`
to `1` (auto). Auto starts persistent and retries an idempotent request once on to `1` (auto). Auto starts persistent and retries an idempotent request once on
a fresh connection. If reuse itself failed, only that lane switches to one a fresh connection for non-timeout failures. An I/O timeout ends the logical
logical request per connection. This avoids turning one imperfect startup tunnel immediately because replaying an upload whose response was lost can
probe into connection churn for every active tunnel. duplicate data. If reuse itself failed without timing out, only that lane
switches to one logical request per connection.
* **Logs show the same transition many times over (`128 -> 64` repeatedly).** * **Logs show the same transition many times over (`128 -> 64` repeatedly).**
Each tunnel adapts independently, so a burst of flows produces a burst of Each tunnel adapts independently, so a burst of flows produces a burst of
identical lines. The app collapses consecutive duplicates into a counted line; identical lines. The app collapses consecutive duplicates into a counted line;
@@ -1225,6 +1232,9 @@ manual tuning makes things worse.
* **Frequent `after transport failure` lines.** The network is dropping large * **Frequent `after transport failure` lines.** The network is dropping large
records. Lower `Max chunk` to a size the probe already found safe — 1400 is records. Lower `Max chunk` to a size the probe already found safe — 1400 is
common — so the client stops rediscovering the limit. common — so the client stops rediscovering the limit.
* **`i/o timeout`.** The active physical connection is closed and the tunnel
exits immediately. It no longer redials that session or repeats the request at
512 KiB, 256 KiB, and every smaller size.
* **Connection dies periodically, then recovers.** A middlebox is capping requests * **Connection dies periodically, then recovers.** A middlebox is capping requests
per connection. Set `Reconnect every` to 832. per connection. Set `Reconnect every` to 832.
* **High-latency, high-bandwidth link.** Leave `--tcp-buffer` at 0 first. Only for * **High-latency, high-bandwidth link.** Leave `--tcp-buffer` at 0 first. Only for
@@ -1263,6 +1273,7 @@ manual tuning makes things worse.
| `upload gap: got N expected M` | The same, in the upload direction. Reconnect. | | `upload gap: got N expected M` | The same, in the upload direction. Reconnect. |
| `server maximum chunk N is below client minimum M` | Raise the server's `--chunk-max` or lower the client's `Min chunk`. | | `server maximum chunk N is below client minimum M` | Raise the server's `--chunk-max` or lower the client's `Min chunk`. |
| `download failed at minimum chunk` | Eight consecutive failures at the smallest record size — the path is not passing traffic at all. | | `download failed at minimum chunk` | Eight consecutive failures at the smallest record size — the path is not passing traffic at all. |
| `i/o timeout` | The physical connection timed out; its tunnel was terminated immediately without replay or a chunk-size retry loop. |
| DNS works, QUIC/UDP apps do not | By design: only DNS is carried over UDP (§7.7). | | DNS works, QUIC/UDP apps do not | By design: only DNS is carried over UDP (§7.7). |
| No IPv6 anywhere | By design: IPv6 is captured and blackholed (§7.4). | | No IPv6 anywhere | By design: IPv6 is captured and blackholed (§7.4). |
| Connections hang instead of failing fast | Expected only for non-SYN packets to unknown flows, which receive an RST. Anything else warrants the logs. | | Connections hang instead of failing fast | Expected only for non-SYN packets to unknown flows, which receive an RST. Anything else warrants the logs. |
@@ -1282,6 +1293,7 @@ Coverage:
* the adaptive record sizer recovering from the minimum rather than latching * the adaptive record sizer recovering from the minimum rather than latching
there, there,
* `reconnectEvery == 0` meaning persistent, * `reconnectEvery == 0` meaning persistent,
* B and BP timeouts returning after one physical connection without replay,
* a pinned batch never growing or shrinking across repeated failures, * a pinned batch never growing or shrinking across repeated failures,
* a pinned batch surviving the ~1 MiB per-batch cap while an unpinned one is still * a pinned batch surviving the ~1 MiB per-batch cap while an unpinned one is still
trimmed by it, trimmed by it,
+4 -4
View File
@@ -1,6 +1,6 @@
969e4a020d5475bfff355f38ca809edb68686b5850af8f9709126ed5bb2d13bb *bin/dragontcp-hybrid-server-linux-amd64 969e4a020d5475bfff355f38ca809edb68686b5850af8f9709126ed5bb2d13bb *bin/dragontcp-hybrid-server-linux-amd64
eaf2d07d8edf17840ce7bad4b1c81e8f3ccb1504c18397a773ca0aacb2ee72ef *bin/dragontcp-hybrid-server-linux-arm64 eaf2d07d8edf17840ce7bad4b1c81e8f3ccb1504c18397a773ca0aacb2ee72ef *bin/dragontcp-hybrid-server-linux-arm64
2ac228a78ad918e859a41a90e667e285b0bf4cfbf2e50cd426ad89a706ffb8b2 *bin/dragontcp-hybrid-client-linux-amd64 a56e8c1bbdee5b81cd4882bc67d97c61e11513c928ff67983c9111478b846a82 *bin/dragontcp-hybrid-client-linux-amd64
b4a37ee8699880ae49ef97e144e9c8fb2cdcb456045a8d41c1e4809de513b994 *android/lib/arm64-v8a/libdragontcp_client.so 5aed020f3c8d29dc7f9aeaa9546be653de537569dce4e57f6c22b9536d409967 *android/lib/arm64-v8a/libdragontcp_client.so
3c45f678da399ecd20c28b8acc631d8c6f18151415ac63109f838a8c68a00e68 *android/lib/armeabi-v7a/libdragontcp_client.so e1252f0501da62d1daf9eb4624b1eec54adb0380b76b037224dc604d2b95ebf2 *android/lib/armeabi-v7a/libdragontcp_client.so
78806799b1c2949835e854635f6c352b572d3b3b526c4a6de877da9dd4e2d98b *android/lib/x86_64/libdragontcp_client.so cdda348cfe7aad548d9a6799594b077f555b2d8acf2364d4109a37ea6a03db46 *android/lib/x86_64/libdragontcp_client.so
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.