CURLOPT_UNIX_SOCKET_PATH(3)
π¦ CURLOPT_UNIX_SOCKET_PATH(3) π¦
okay so welcome to the CURLOPT_UNIX_SOCKET_PATH(3) page from the Library Functions Manual β yes bestie, we are reading curl docs together and honestly it's giving useful π
β¨ NAME β¨
CURLOPT_UNIX_SOCKET_PATH β Unix domain socket, but make it connection-endpoint real π«Ά
πΈ SYNOPSIS πΈ
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);
π DESCRIPTION π
So this option turns on the use of Unix domain sockets as the connection endpoint, and it sets the path to path β¨ If path is NULL, then Unix domain sockets are disabled again, no cap.
When it's enabled, curl connects to the Unix domain socket instead of establishing a TCP connection to the host. Since no network connection is created, curl does not resolve the DNS hostname in the URL. literally no DNS moment, none, zero, nada π
The maximum path length on Cygwin, Linux and Solaris is 107. On other platforms it might be even less β so keep an eye on that, bestie π
β οΈ Proxy and TCP options such asCURLOPT_TCP_NODELAY(3)are not supported. Proxy options such asCURLOPT_PROXY(3)have no effect either, because these are TCP-oriented, and asking a proxy server to connect to a certain Unix domain socket is not possible. Not a drill π¨
The application does not have to keep the string around after setting this option. Cute, right? π
Using this option multiple times makes the last set string override the previous ones. Set it to NULL to disable its use again. periodt π
π DEFAULT π
NULL - no Unix domain sockets are used.
π PROTOCOLS π
This functionality affects all supported protocols β¨
π§ EXAMPLE π§
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_UNIX_SOCKET_PATH, "/tmp/httpd.sock");
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");
curl_easy_perform(curl);
}
}
If you are on Linux and somehow have a need for paths larger than 107 bytes, you can use the proc file system to bypass the limitation:
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
char path[108];
snprintf(path, sizeof(path), "/proc/self/fd/%d/httpd.sock", dirfd);
curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, path);
/* Be sure to keep dirfd valid until you discard the handle */
π AVAILABILITY π
Added in curl 7.40.0 π
β 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).
π¦ SEE ALSO π¦
β xoxo, libcurl Β· 2026-10-12 Β· CURLOPT_UNIX_SOCKET_PATH(3) π
π¦ 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