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 as CURLOPT_TCP_NODELAY(3) are not supported. Proxy options such as CURLOPT_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