Describe checked datagram startup and bounded TCP HUP handling
This commit is contained in:
1 parent
e2ee5f2397
commit
f10a6f70c5
2 files changed
+41
-14
No files matched your search
@@ -44,11 +44,15 @@ socks_proxy_conn_free_all(&conns, &conn_count); // все соединения
|
||||
`inst/ua/conns/count/next_stream_id` заимствуются и должны жить до закрытия listener и всех клиентов.
|
||||
Закрытие listener сохраняет активных клиентов. Вызовы и callbacks выполняются в uasync владельца.
|
||||
Адрес listener — IPv4:port; порт 0 выбирает ОС, фактический порт возвращает `socks_proxy_get_port()`.
|
||||
При создании через `tcp_proxy_client_create` каждый включённый listener обязателен:
|
||||
пустой/неверный адрес или ошибка bind/listen откатывают создание всего клиента.
|
||||
|
||||
### Ключевые нюансы
|
||||
- **Backpressure:** DATA ждёт CONNECTED и кредита `proxy_flow`. Неотправленные байты сохраняются
|
||||
в `tx_buf/tx_len` и отправляются порциями до 4096. При доступном окне ставится router send-ready
|
||||
waiter; safety-net 500 мс возобновляет отправку с обычным force=0. Чтение tcp_io ограничено его очередью.
|
||||
HUP сохраняет high/low-water и ручную остановку чтения; временно снятая регистрация fd
|
||||
восстанавливается после освобождения очереди. Запись не зависит от паузы чтения.
|
||||
- **Несколько соединений:** управляются через связный список `struct socks_proxy_conn*` + счётчик. В HTTP keep-alive каждое сообщение получает новый upstream stream; клиентский TCP-сокет сохраняется. Pipelining обрабатывается последовательно, включая запросы к разным адресатам.
|
||||
- **stream_id** генерируется монотонно (`++next_stream_id`), передаётся в заголовке ETCP-пакетов для мультиплексирования.
|
||||
|
||||
@@ -172,3 +176,6 @@ SOCKS greeting принимает только предложенный мето
|
||||
|
||||
Нормативные размеры сообщений и порядок байтов — в [proxy_protocol.md](../../doc/proxy_protocol.md).
|
||||
Контракты чистого HTTP codec (обнуление состояния, emit/source_len, used и EOF) — в [http_proxy.h](http_proxy.h).
|
||||
`test_socks_http_proxy` проверяет 16 byte-exact загрузок и двусторонний TLS shutdown.
|
||||
`UTUN_TEST_TLS_ABRUPT=1` отдельно воспроизводит обрыв TLS: реальные EPIPE/ENOTCONN
|
||||
остаются ошибками TCP и диагностируются, уже доставленные ответы сохраняются.
|
||||
Reference in new issue
Block a user