Почему curl_global_sslset() возвращает CURLSSLSET_TOO_LATE, даже если он вызван перед curl_global_init()?

#cygwin #libcurl

#cygwin #libcurl

Вопрос:

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

Я сократил его до этого примера ниже. Он компилируется и выполняется, но возврат от вызова curl_global_sslset() равен 2 (CURLSSLSET_TOO_LATE), а не CURLSSLSET_UNKNOWN_BACKEND.

Обратите внимание, что я не вызывал curl_global_init(). Согласно документации libcurl для curl_global_sslset():

Если серверная часть была настроена ранее, или если curl_global_init уже был вызван, функция возвращает CURLSSLSET_TOO_LATE.

Я компилирую и запускаю 64-разрядный Cygwin, установленный в Windows 7. Выходные данные curl-config —version и curl-config —features отображаются под кодом.

Почему это происходит, и что можно сделать, чтобы это исправить?

 #include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <curl/curl.h>

/*
 * An SSL-enabled libcurl is required for this sample to work (at least one
 * SSL backend has to be configured).
 *
 *  **** This example only works with libcurl 7.56.0 and later! ****
*/

int main(void)
{
    CURLsslset resu<
    const curl_ssl_backend **list;
    int i;

    result = curl_global_sslset(-1, NULL, amp;list);
    if (result == CURLSSLSET_UNKNOWN_BACKEND) {
        for(i = 0; list[i]; i  ) {
            printf("SSL backend #%d: '%s' (ID: %d)n",
                        i, list[i]->name, list[i]->id);
        }
    }
    else {
        printf("curl_global_sslset returns %dn", result);
    }

    return 0;
}
  

Curl-config выводит:

 $ curl-config --version
libcurl 7.59.0


$ curl-config --features
SSL
IPv6
UnixSockets
libz
AsynchDNS
IDN
GSS-API
PSL
SPNEGO
Kerberos
NTLM
NTLM_WB
TLS-SRP
HTTP2
HTTPS-proxy
  

Комментарии:

1. Я не могу этого объяснить. У меня этого не происходит в Linux. Я бы рекомендовал использовать отладчик, чтобы разобраться в этом, поскольку это звучит как возможная ошибка…