curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.md
Daniel Stenberg e694c8284a
docs/libcurl/opts: clarify the return values
Expand a little.

- mention the type name of the return code
- avoid stating which exact return codes that might be returned, as that
  varies over time, builds and conditions
- avoid stating some always return OK
- refer to the manpage documenting all the return codes

Closes #15900
2025-01-02 17:13:33 +01:00

1.9 KiB

c SPDX-License-Identifier Title Section Source See-also Protocol Added-in
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. curl CURLOPT_CLOSESOCKETFUNCTION 3 libcurl
CURLOPT_CLOSESOCKETDATA (3)
CURLOPT_OPENSOCKETFUNCTION (3)
All
7.21.7

NAME

CURLOPT_CLOSESOCKETFUNCTION - callback to socket close replacement

SYNOPSIS

#include <curl/curl.h>

int closesocket_callback(void *clientp, curl_socket_t item);

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETFUNCTION,
                          closesocket_callback);

DESCRIPTION

Pass a pointer to your callback function, which should match the prototype shown above.

This callback function gets called by libcurl instead of the close(3) or closesocket(3) call when sockets are closed (not for any other file descriptors). This is pretty much the reverse to the CURLOPT_OPENSOCKETFUNCTION(3) option. Return 0 to signal success and 1 if there was an error.

The clientp pointer is set with CURLOPT_CLOSESOCKETDATA(3). item is the socket libcurl wants to be closed.

DEFAULT

Use the standard socket close function.

%PROTOCOLS%

EXAMPLE

struct priv {
  void *custom;
};

static int closesocket(void *clientp, curl_socket_t item)
{
  struct priv *my = clientp;
  printf("our ptr: %p\n", my->custom);

  printf("libcurl wants to close %d now\n", (int)item);
  return 0;
}

int main(void)
{
  struct priv myown;
  CURL *curl = curl_easy_init();

  /* call this function to close sockets */
  curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
  curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown);

  curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}

%AVAILABILITY%

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).