Многопоточное программное обеспечение C-сервера, работающее таким образом:
1 поток является API отдыха (связан с libmicrohttpd)
1 поток устанавливает соединение STUN (используя libnice)
1 поток отвечает за ssl handhsake (openssl)
1 поток собирает данные (в кольцевом буфере)
1 поток распределяет эти данные (из кольцевого буфера)
клиент (javascript) работает в браузере (Firefox, Chrome или Safari) в Linux, Windows, MacOS или iO.
Safari в iOS не выдает локальных кандидатов на льды, поэтому я активировал расширенную опцию кандидатов на mDNS, и она прекрасно работает.
проблема в том, что как только мне перезвонят в cb_component_state_changed с состоянием "соединения", я начинаю получать данные в cb_nice_received, даже если соединение не установлено (в потоке соединения stun).
Я начинаю неоднократно получать приветствие от клиента, и остальная нить API почему-то становится неактивной, потому что основной запрос работает интенсивно, и я не вижу кандидата на лед, который отправляется браузером и поэтому не может кормить агента этим, следовательно Соединение с оглушением не завершено. Я вижу это в wireshark, но обратный вызов libmicrohttpd не вызывается, поэтому я никогда не завершаю ледовое соединение
В основном мой вопрос состоит из двух частей:
Почему я получаю данные в cb_nice_received, хотя на этом этапе соединение не установлено?
Как мне поступить, может быть, замедлить основной глобал, чтобы остальная нить API могла вставить слово на ребро ...
программное обеспечение работает безупречно в Firefox и Chrome в Linux, Windows и Mac OS, в Safari в Mac OS, но проблемы обнаруживаются в Safari iOS.
Спасибо за вашу помощь; -)
Я уже пытался вставить ус в cb_nice_received, чтобы он уступил другим потокам, включая REST API, безрезультатно
ожидаемый результат - баланс между потоками, поэтому gloop не захватывает всю программу, не позволяя другим потокам работать