Протокол FD Control
Эта функция в основном используется для разработки Android-приложений прокси.
Клиент Hysteria поддерживает отправку файлового дескриптора (fd) исходящих QUIC-соединений любому процессу, слушающему на fdControlUnixSocket.
Примечание: fdControlUnixSocket в настоящее время эффективен только для исходящих QUIC-соединений. Сторонние Android-клиенты, использующие эту функцию, должны самостоятельно обрабатывать дополнительные DNS-запросы для домена сервера Hysteria, или убедиться, что опция server в конфигурации клиента Hysteria содержит IP-адрес, а не домен.
Роли
- Сервер: Сторонний процесс, слушающий на
fdControlUnixSocket, например основной процесс Android-приложения. - Клиент: Процесс клиента Hysteria.
Реализация сервера
- Прослушивать Unix Socket на основе пути, который должен быть типа
SOCK_STREAM. - Принимать соединения, инициированные клиентом, с помощью
accept(2). - Получить один
fd, отправленный клиентом черезrecvmsg(2). - Обработать
fd, полученный на шаге 3 (например, вызвавVpnService.protect()), а затем закрытьfd. - Ответить клиенту одним байтом, уведомляя о продолжении операций. Рекомендуется отвечать
'\x01'в нормальных условиях; другие значения в настоящее время не определены. - Закрыть соединение, установленное на шаге 2 — каждое соединение обрабатывает только один
fd.