Sun, 22 Feb 2026 13:39:39 +0100
fix proxy connect
--- a/src/server/proxy/httpclient.c Sun Feb 22 13:19:12 2026 +0100 +++ b/src/server/proxy/httpclient.c Sun Feb 22 13:39:39 2026 +0100 @@ -97,10 +97,11 @@ free(client); } -int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen) { +int http_client_set_addr(HttpClient *client, int domain, const struct sockaddr *addr, socklen_t addrlen) { free(client->addr); client->addr = NULL; client->addrlen = 0; + client->domain = domain; void *newaddr = malloc(addrlen); if(!newaddr) { @@ -185,7 +186,7 @@ } int http_client_start(HttpClient *client) { - int socketfd = socket(AF_INET, SOCK_STREAM, 0); + int socketfd = socket(client->domain, SOCK_STREAM, 0); if(socketfd < 0) { return 1; }
--- a/src/server/proxy/httpclient.h Sun Feb 22 13:19:12 2026 +0100 +++ b/src/server/proxy/httpclient.h Sun Feb 22 13:39:39 2026 +0100 @@ -58,6 +58,7 @@ struct sockaddr *addr; size_t addrlen; + int domain; int socketfd; HttpStream *stream; @@ -172,7 +173,7 @@ void http_client_free(HttpClient *client); -int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen); +int http_client_set_addr(HttpClient *client, int domain, const struct sockaddr *addr, socklen_t addrlen); int http_client_set_method(HttpClient *client, const char *method);
--- a/src/server/safs/proxy.c Sun Feb 22 13:19:12 2026 +0100 +++ b/src/server/safs/proxy.c Sun Feb 22 13:39:39 2026 +0100 @@ -262,7 +262,7 @@ // set server address struct addrinfo hints = { 0 }; - hints.ai_family = AF_UNSPEC; + hints.ai_family = AF_INET; //AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; struct addrinfo *srv_addr; if(getaddrinfo(srvhost, srvport, &hints, &srv_addr)) { @@ -271,21 +271,24 @@ return REQ_ABORTED; } - int ret = http_client_set_addr(client, srv_addr->ai_addr, srv_addr->ai_addrlen); + WSBool addr_set = FALSE; + struct addrinfo *addr = srv_addr; + while(addr) { + if(addr->ai_family == AF_INET || addr->ai_family == AF_INET6) { + if(!http_client_set_addr(client, addr->ai_family, addr->ai_addr, addr->ai_addrlen)) { + addr_set = TRUE; + } + break; + } + + addr = addr->ai_next; + } freeaddrinfo(srv_addr); - if(ret) { + if(!addr_set) { http_client_free(client); return REQ_ABORTED; } - // test address - struct sockaddr_in address; - inet_pton(AF_INET, "127.0.0.1", &address.sin_addr); - address.sin_family = AF_INET; - address.sin_port = htons(8080); - http_client_set_addr(client, (struct sockaddr*)&address, sizeof(address)); - http_client_add_request_header(client, cx_mutstr("host"), cx_mutstr("localhost:8080")); - // add request headers to the client CxIterator i = pblock_iterator(rq->headers); cx_foreach(pb_entry*, entry, i) {