libcurl: как получить дескриптор файла из активного соединения? - PullRequest
0 голосов
/ 13 февраля 2019

Воспроизведение по теме, описанной здесь ( Использование многоинтерфейса libcurl для последовательных запросов на один и тот же «простой» дескриптор ), в моей организации есть классы-оболочки для выбора и опроса для обработки ввода / вывода из файловых дескрипторов.В соответствии с нашими классами-оболочками я хотел бы получить файловый дескриптор каждого простого дескриптора.Я использую мультиинтерфейс для работы с несколькими простыми ручками в приложении реального времени.

Я понимаю, что могу использовать curl_multi_fd_set для получения наборов FD.Я мог бы перебрать набор FD, чтобы получить номер FD.Тем не менее, я не буду знать связанную легкую ручку для FD.Кроме того, если FD открывается выше предела FD_SET, я не получу этот FD.

Другой вариант, который я рассматриваю, - это использовать curl_easy_getinfo и использовать параметры ACTIVESOCKET или LASTSOCKET.Мой libcurl старый, поэтому я не мог использовать ACTIVESOCKET для теста.Тем не менее, небольшой тест, который я провел с использованием curl_multi_perform, за которым следовал curl_easy_getinfo (LASTSOCKET), дал мне результат -1 - что означает отсутствие файлового дескриптора.Запросы простой обработки выполнялись на таких веб-сайтах, как google.com.Я попытаюсь обновить мой libcurl до более новой версии, чтобы увидеть, получаю ли я другой результат с ACTIVESOCKET.

Есть ли другой способ получить дескриптор файла из простой ручки?

1 Ответ

0 голосов
/ 14 февраля 2019

Я бы предложил вам переключиться и использовать вместо этого multi_socket API , где curl_multi_socket_action является основным драйвером.

Этот API-интерфейс призывает вас рассказать о каждоми каждый сокет, чтобы ждать, а затем вы ждете этого / тех и сообщаете libcurl, когда что-то произошло на этом сокете.Это позволяет довольно легко встроить libcurl в ваши собственные системы обертки циклов / сокетов IO.

...