CURLOPT_ALTSVC_CTRL(3)
β¨ CURLOPT_ALTSVC_CTRL(3) β control alt-svc behavior β¨
okay so bestie, this is the CURLOPT_ALTSVC_CTRL page from the Library Functions Manual, and it is literally all about telling libcurl how to handle Alt-Svc for your transfers. no cap, we are keeping every flag, every bit, and every caveat. π
π NAME π
CURLOPT_ALTSVC_CTRL β control alt-svc behavior. that is the whole name, and yes it is giving "let me control the alt-svc engine." π
π SYNOPSIS π
#include <curl/curl.h>
#define CURLALTSVC_READONLYFILE (1L << 2)
#define CURLALTSVC_H1 (1L << 3)
#define CURLALTSVC_H2 (1L << 4)
#define CURLALTSVC_H3 (1L << 5)
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask);
π¦ DESCRIPTION π¦
Populate the long bitmask with the correct set of features, bestie. that is how you instruct libcurl how to handle Alt-Svc for the transfers using this handle. β¨
libcurl only accepts Alt-Svc headers over HTTPS. It also only completes a request to an alternative origin if that origin is properly hosted over HTTPS. These requirements are there to make sure both the source and the destination are legitimate. yes, safety check, we love a secure queen. π
Alternative services are only used when setting up new connections. If there is an existing connection to the host in the connection pool, then that one is preferred. periodt.
If CURLOPT_ALTSVC(3) is set, CURLOPT_ALTSVC_CTRL(3) gets a default value corresponding to CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 β the HTTP/2 and HTTP/3 bits are only set if libcurl was built with support for those versions. π
Setting any bit enables the alt-svc engine. like, any bit at all, bestie.
CURLALTSVC_READONLYFILEβ do not write the alt-svc cache back to the file specified withCURLOPT_ALTSVC(3)even if it gets updated. by default, a file specified with that option is read and written to as deemed necessary.CURLALTSVC_H1β accept alternative services offered over HTTP/1.1. πCURLALTSVC_H2β accept alternative services offered over HTTP/2. this is only used if libcurl was also built to actually support HTTP/2, otherwise this bit is ignored.CURLALTSVC_H3β accept alternative services offered over HTTP/3. this is only used if libcurl was also built to actually support HTTP/3, otherwise this bit is ignored.
π DEFAULT π
0 β Alt-Svc handling is disabled. yep, off by default, no Alt-Svc shenanigans until you turn it on. π«
π PROTOCOLS π
This functionality affects http only. literally just http, bestie.
π EXAMPLE π
okay so here is the example, and it is adorable:
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
curl_easy_perform(curl);
}
}
π§ HISTORY π§
CURLALTSVC_* macros became long types in 8.16.0. prior to this version, a long cast was necessary when passed to curl_easy_setopt(3). history lesson served. π
πΈ AVAILABILITY πΈ
Added in curl 7.64.1. that is the tea. π«
π RETURN VALUE π
curl_easy_setopt(3) returns a CURLcode indicating success or error.
CURLE_OK (0) means everything was OK. non-zero means an error occurred, see libcurl-errors(3). so if it is not 0, something went sideways, bestie. π
π SEE ALSO π
mwah π this page is source/version libcurl, dated 2026-10-12, for CURLOPT_ALTSVC_CTRL(3). bye bestie, go slay your Alt-Svc setup! π¦
π¦ where this page comes from
- fedora 44: libcurl-devel 8.18.0-14.fc44 Β· curl
- fedora 44: libcurl-devel 8.18.0-14.fc44 Β· curl
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms