Hi guys,
I'm having problems connecting to the SSL socket in my C++ application. I'm trying to write a simple HTTPS client for accessing Ollama openai-compatible API. 
When I compile my app on Linux I can connect without issues. But when I build for morphos it fails to SSL_connect without any error.
SSL_connect returns -1 and that's it. Do I need to call OpenLibrary or do some special initialization not required in linux? 
Below is my program (I added some ifdefs to build for linux) and the build script:
Code:
#ifdef __MORPHOS__
#include <proto/exec.h>
#include <proto/socket.h>
#endif
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <string>
#include <netdb.h>
#ifndef __MORPHOS__
#define UBYTE char
#endif
#define OLLAMA_API_HOST "some-host-with-ssl.com"
#define OLLAMA_API_PORT 443
#define OLLAMA_API_ENDPOINT "/ollama/v1/chat/completions"
#define OLLAMA_API_KEY "Bearer <base64 encoded credentials>"
#ifdef __MORPHOS__
struct Library *SocketBase;
#endif
SSL_CTX *ssl_ctx;
SSL *ssl;
const SSL_METHOD *method;
int sockfd;
bool init_network() {
#ifdef __MORPHOS__    
    SocketBase = OpenLibrary("bsdsocket.library", 4);
    if (!SocketBase) {
        printf("Can't open bsdsocket.libraryn");
        return false;
    }
#endif
    SSL_library_init();
    SSL_load_error_strings();
    ERR_load_crypto_strings();
	method = TLS_client_method();
    ssl_ctx = SSL_CTX_new(method);
	SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_3_VERSION);
	SSL_CTX_set_cipher_list(ssl_ctx, "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256");
    if (!ssl_ctx) {
        printf("Error initializing OpenSSLn");
        return false;
    }
    return true;
}
bool connect_to_openai() {
    struct hostent *server;
    struct sockaddr_in serv_addr;
    std::string host = OLLAMA_API_HOST;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        printf("Can't create socketn");
        return false;
    }
    server = gethostbyname((UBYTE*)host.c_str());
    if (!server) {
        printf("DNS Errorn");
        return false;
    }
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    memcpy(&serv_addr.sin_addr.s_addr, server->h_addr_list[0], server->h_length);
    serv_addr.sin_port = htons(OLLAMA_API_PORT);
    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("Connection errorn");
        return false;
    }
    ssl = SSL_new(ssl_ctx);
    SSL_set_fd(ssl, sockfd);
    int ret,err;
    if ((ret = SSL_connect(ssl)) < 0) {
        printf("SSL_connect: %dn", ret);
		
		ret = SSL_get_error(ssl, ret);
		ERR_print_errors_fp(stdout);
        
		if((err = ERR_get_error())) {
            
            printf("SSL connect err code:[%lu](%s)n", err, ERR_error_string(err, NULL));
            printf("Error is %s n",ERR_reason_error_string(err));
        }
        printf("SSL Error: %dn", err);
        return false;
    }
    return true;
}
bool send_request() {
    const char *request_body =
        "{"
        ""model": "llama3.1:8b","
        ""messages": [{"role": "user", "content": "Hello, Ollama!"}],"
        ""temperature": 0.7"
        "}";
    char request[2048];
    snprintf(request, sizeof(request),
        "POST %s HTTP/1.1rn"
        "Host: %srn"
        "Authorization: %srn"
        "Content-Type: application/jsonrn"
        "Content-Length: %lurn"
        "Connection: closern"
        "rn"
        "%s",
        OLLAMA_API_ENDPOINT, OLLAMA_API_HOST, OLLAMA_API_KEY, strlen(request_body), request_body);
    if (SSL_write(ssl, request, strlen(request)) <= 0) {
        printf("Error sending datan");
        return false;
    }
    return true;
}
void receive_response() {
    char response[8192];
    int bytes_received;
    while ((bytes_received = SSL_read(ssl, response, sizeof(response) - 1)) > 0) {
        response[bytes_received] = '