CURLOPT_SSL_FALSESTART(3)
π CURLOPT_SSL_FALSESTART(3) β the curl library functions manual, bestie edition
okay so this page lives in the Library Functions Manual and it's literally all about CURLOPT_SSL_FALSESTART, aka "TLS false start". yes it sounds like a sports penalty. no it's not. let's get into it πββοΈπ¨
β¨ NAME β¨
CURLOPT_SSL_FALSESTART β TLS false start, bestie. that's the whole name, slay.
πΈ SYNOPSIS πΈ
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
that's it. that's the whole vibe. include the header, call curl_easy_setopt, pass the handle, this option, and a long. easy π«Ά
π DESCRIPTION π
so you pass a long as the parameter, and you set it to 1L to enable it or 0 to disable it. that's it. no complicated struct, no callback, no drama π
this option decides whether libcurl should do false start during the TLS handshake. and what even is false start, you ask? ok so it's a mode where the TLS client starts yeeting application data over before it's verified the server's Finished message. the whole point? you save a round trip when you're doing a full handshake. it's giving "skip the small talk, we're besties already" energy β‘
ngl though, the "i haven't verified you yet" part is the whole reason this thing is spicy β that's the trade-off the mode is literally built on, so just know that's what you're signing up for π₯
π DEFAULT π
0
off. off off off. it's not doing the thing unless you tell it to do the thing π
π¦ PROTOCOLS π¦
this functionality affects all TLS based protocols, and the manpage lists them as:
HTTPSFTPSIMAPSPOP3SSMTPS- etc. (yes, etc., they really said "you know the rest" π)
and now the plot twist, sit down for this one:
No TLS backend supports this option. π
not one. zero. the whole squad said "no thank you". so like⦠it's cross-protocol in theory but backend-less in practice. iykyk.
π EXAMPLE π
here's the whole program, verbatim, no cap:
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_SSL_FALSESTART, 1L);
curl_easy_perform(curl);
}
}
init the handle, check it's not NULL (main character energy: always check your handle), set the URL to "https://example.com", flip CURLOPT_SSL_FALSESTART to 1L, and curl_easy_perform(curl). go off π
π DEPRECATED π
Deprecated since 8.15.0.
yup. it's deprecated. it had a good run. this option is now the "old friend you still have in your contacts" of libcurl options π«Ά
β AVAILABILITY β
Added in curl 7.42.0 β so it's been around a minute. respect the elders π
π RETURN VALUE π
curl_easy_setopt(3) returns a CURLcode indicating success or error. iconic, consistent, as always.
CURLE_OK (0) means everything was OK β
β non-zero means an error occurred β, and you should go check libcurl-errors(3) for what that number's whole deal is.
π SEE ALSO π
CURLOPT_TCP_FASTOPEN(3)β the other fast-open-flavored friend, go say hi π§
and that's the page!! mwah π this was the CURLOPT_SSL_FALSESTART(3) entry from the libcurl manual, dated 2026-10-12. now go forth and set your options responsibly, bestie πβ¨π
π¦ 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