Document atomic proxy client creation and instance shutdown order
This commit is contained in:
1 parent
5914e26579
commit
e2ee5f2397
2 files changed
+18
-7
No files matched your search
@@ -8,8 +8,8 @@
|
||||
|
||||
## Создание и владение
|
||||
|
||||
`tcp_proxy_client_create` вызывается в uasync с живым `ua`. TUN/lwIP создаются только
|
||||
при **обоих** непустых `tun_name` и `tun_ip`. В этом случае `tun_init_nat` создаёт
|
||||
`tcp_proxy_client_create` вызывается в uasync с живым `ua`. Для TUN нужны **оба**
|
||||
непустых `tun_name` и `tun_ip`; задание только одного — ошибка. `tun_init_nat` создаёт
|
||||
отдельный proxy TUN (test_mode выбирает тестовый интерфейс); MTU<=0 заменяется на 1500,
|
||||
MTU TUN передаётся в lwIP. Имя tun_init_nat не означает включение eim_nat на ingress.
|
||||
Без TUN необходим хотя бы флаг SOCKS или HTTP; эти listeners могут работать без lwIP.
|
||||
@@ -20,9 +20,10 @@ MTU TUN передаётся в lwIP. Имя tun_init_nat не означает
|
||||
обмена через router нужен instance. Mappings содержат порты в host byte order,
|
||||
адрес назначения — IPv4-строку.
|
||||
|
||||
Критическая ошибка TUN/lwIP/пула возвращает NULL. Ошибка отдельного listener или
|
||||
router bind не отменяет создание всего клиента; проверять конкретные listener handles
|
||||
и диагностику. UDP/ICMP инициализируются только для TUN после успешного TCP bind.
|
||||
Все заданные SOCKS/HTTP listeners, TUN mappings, TUN/lwIP/пулы и TCP router binding
|
||||
обязательны. Ошибка любого шага возвращает NULL и освобождает уже созданные ресурсы.
|
||||
Повторное создание клиента или занятой binding отклоняются. UDP/ICMP создаёт владелец
|
||||
instance после успешного создания TCP-модулей, если есть TUN либо включён exit.
|
||||
|
||||
Клиент привязывается к `ETCP_RT_ID_TCP_PROXY_CLIENT` (0x08), сервер — к
|
||||
`ETCP_RT_ID_TCP_PROXY_SERVER` (0x04). Генератор stream_id общий для TUN/SOCKS/HTTP,
|
||||
@@ -81,7 +82,7 @@ CLOSE/ERROR при неудаче отправки могут повторять
|
||||
Пустое уведомление router (`ROUTER_SVC_HDR_SIZE=26`, без TCP command/sid) удаляет
|
||||
все lwIP/SOCKS/HTTP потоки клиента к настроенному exit. Это не 9-байтовый wire CLOSE_ALL.
|
||||
|
||||
`destroy` снимает TCP binding, закрывает listeners/клиентов, освобождает lwIP/TUN/пул.
|
||||
Общие UDP/ICMP уничтожаются только при выключенном сервере того же instance.
|
||||
`destroy` снимает только собственный TCP binding, закрывает listeners/клиентов,
|
||||
освобождает lwIP/TUN/пул. Общие UDP/ICMP принадлежат instance и сохраняются.
|
||||
Владелец затем сам обнуляет `inst->tcp_proxy_client`. Все callbacks и очистка выполняются
|
||||
в uasync; уничтожать клиента следует вне его активного callback.
|
||||
Reference in new issue
Block a user