diff --git a/lib/connect.c b/lib/connect.c index 68cfe72ef1..38f75e09f2 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -1604,9 +1604,20 @@ CURLcode Curl_socket(struct Curl_easy *data, */ addr->family = ai->ai_family; - addr->socktype = (conn->transport == TRNSPRT_TCP) ? SOCK_STREAM : SOCK_DGRAM; - addr->protocol = conn->transport != TRNSPRT_TCP ? IPPROTO_UDP : - ai->ai_protocol; + switch(conn->transport) { + case TRNSPRT_TCP: + addr->socktype = SOCK_STREAM; + addr->protocol = IPPROTO_TCP; + break; + case TRNSPRT_UNIX: + addr->socktype = SOCK_STREAM; + addr->protocol = IPPROTO_IP; + break; + default: /* UDP and QUIC */ + addr->socktype = SOCK_DGRAM; + addr->protocol = IPPROTO_UDP; + break; + } addr->addrlen = ai->ai_addrlen; if(addr->addrlen > sizeof(struct Curl_sockaddr_storage)) diff --git a/lib/url.c b/lib/url.c index 426528fb5e..a57c8da9fa 100644 --- a/lib/url.c +++ b/lib/url.c @@ -3477,6 +3477,7 @@ static CURLcode resolve_server(struct Curl_easy *data, free(hostaddr); hostaddr = NULL; } + conn->transport = TRNSPRT_UNIX; } } else diff --git a/lib/urldata.h b/lib/urldata.h index 34967fb28a..d8c3f6f593 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -879,6 +879,11 @@ struct connstate { unsigned char *outp; /* send from this pointer */ }; +#define TRNSPRT_TCP 3 +#define TRNSPRT_UDP 4 +#define TRNSPRT_QUIC 5 +#define TRNSPRT_UNIX 6 + /* * The connectdata struct contains all fields and variables that should be * unique for an entire connection. @@ -919,12 +924,7 @@ struct connectdata { #ifdef ENABLE_IPV6 unsigned int scope_id; /* Scope id for IPv6 */ #endif - - enum { - TRNSPRT_TCP = 3, - TRNSPRT_UDP = 4, - TRNSPRT_QUIC = 5 - } transport; + unsigned char transport; /* one of the TRNSPRT_* defines */ #ifdef ENABLE_QUIC struct quicsocket hequic[2]; /* two, for happy eyeballs! */