gnurl_easy_send(3)

πŸ“¦ version 7.72.0, in nixos 26.05, nixpkgs unstable

πŸŽ€ gnurl_easy_send(3) β€” the libgnurl manual, bestie edition πŸŽ€

✨ NAME ✨

curl_easy_send β€” sends raw data over an "easy" connection. That’s the whole vibe: raw data, easy connection, custom protocol hours. πŸ’…

🌸 SYNOPSIS 🌸

Okay so first, the include and signature, exactly as they live:

#include <gnurl/easy.h>

CURLcode curl_easy_send( CURL *curl, const void *buffer,  size_t buflen,
       size_t *n);

πŸ¦‹ DESCRIPTION πŸ¦‹

This function sends arbitrary data over the established connection. You may use it together with curl_easy_recv(3) to implement custom protocols using libcurl. This functionality can be particularly useful if you use proxies and/or SSL encryption: libcurl will take care of proxy negotiation and connection set-up. No cap, it handles the boring setup so you can do your custom-protocol main character thing. ✨

buffer is a pointer to the data of length buflen that you want sent. The variable n points to will receive the number of sent bytes.

To establish the connection, set CURLOPT_CONNECT_ONLY(3) option before calling curl_easy_perform(3) or curl_multi_perform(3). Note that curl_easy_send(3) will not work on connections that were created without this option. Like, fr fr, that option is not optional here. πŸ™ˆ

The call will return CURLE_AGAIN if it’s not possible to send data right now β€” the socket is used in non-blocking mode internally. When CURLE_AGAIN is returned, use your operating system facilities like select(2) to wait until the socket is writable. The socket may be obtained using curl_easy_getinfo(3) with CURLINFO_ACTIVESOCKET(3). Slay your way through the wait. πŸ’…

Furthermore if you wait on the socket and it tells you it’s writable, curl_easy_send(3) may return CURLE_AGAIN if the only data that was sent was for internal SSL processing, and no other data could be sent. Sneaky little SSL moment. 😭

🌈 AVAILABILITY 🌈

Added in 7.18.2. Iconic. πŸ‘‘

πŸ’– RETURN VALUE πŸ’–

  • On success, returns CURLE_OK and stores the number of bytes actually sent into *n. Note that this may very well be less than the amount you wanted to send. Not a bug, just the vibe.
  • On failure, returns the appropriate error code.
  • This function may return CURLE_AGAIN. In this case, use your operating system facilities to wait until the socket is writable, and retry.
  • If there’s no socket available to use from the previous transfer, this function returns CURLE_UNSUPPORTED_PROTOCOL.

πŸ“ EXAMPLE πŸ“

See sendrecv.c in docs/examples directory for usage example.

🫢 SEE ALSO 🫢


Before you go, bestie: this gnurl_easy_send(3) page is from libcurl 7.18.2, dated 29 April 2008. Mwah. πŸ’‹πŸŽ€

πŸ“¦ where this page comes from