Почему поздно заданное свойство CFStream SOCKS может быть отклонено
Применяйте настраиваемые свойства потока до открытия, проверяйте принятие и отличайте запуск потока от завершения согласования с прокси.
Обратный вызов с именем «will connect» не доказывает, что CFStream всё ещё можно настраивать. Контракт CFReadStreamSetProperty от Apple говорит, что следует исходить из того, что свойства задаются до открытия, если только их собственная документация не утверждает иное.
Для существующей интеграции потока держите последовательность вместе: создайте поток/пару, постройте правильно типизированный словарь SOCKS, задайте нужное свойство и проверьте его логический результат, затем зарегистрируйте события и начните открытие.
Результат false — это сбой конфигурации, а не установленный маршрут. Перед продолжением проверьте тип потока, ключ свойства, типы значений словаря и жизненный цикл.
В событийной схеме открытие может начаться, не завершив согласование. Наблюдайте события состояния и ошибок, прежде чем считать соединение пригодным.
Если потоком владеет другая библиотека, используйте её документированный хук перед открытием. Обратный вызов, приходящий только позже, может быть неверной точкой интеграции. Изменение свойств уже открытого потока не может перевести это существующее соединение на SOCKS.