aboutsummaryrefslogtreecommitdiff
path: root/docs/libcurl/curl_ws_send.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/libcurl/curl_ws_send.md')
-rw-r--r--docs/libcurl/curl_ws_send.md120
1 files changed, 120 insertions, 0 deletions
diff --git a/docs/libcurl/curl_ws_send.md b/docs/libcurl/curl_ws_send.md
new file mode 100644
index 000000000..a5a056c9d
--- /dev/null
+++ b/docs/libcurl/curl_ws_send.md
@@ -0,0 +1,120 @@
+---
+c: Copyright (C) Daniel Stenberg, <daniel.se>, et al.
+SPDX-License-Identifier: curl
+Title: curl_ws_send
+Section: 3
+Source: libcurl
+See-also:
+ - curl_easy_getinfo (3)
+ - curl_easy_perform (3)
+ - curl_easy_setopt (3)
+ - curl_ws_recv (3)
+ - libcurl-ws (3)
+---
+
+# NAME
+
+curl_ws_send - send WebSocket data
+
+# SYNOPSIS
+
+~~~c
+#include <curl/curl.h>
+
+CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen,
+ size_t *sent, curl_off_t fragsize,
+ unsigned int flags);
+~~~
+
+# DESCRIPTION
+
+This function call is EXPERIMENTAL.
+
+Send the specific message fragment over an established WebSocket
+connection. The *buffer* holds the data to send and it is *buflen*
+number of payload bytes in that memory area.
+
+*sent* is returned as the number of payload bytes actually sent.
+
+To send a (huge) fragment using multiple calls with partial content per
+invoke, set the *CURLWS_OFFSET* bit and the *fragsize* argument as the
+total expected size for the first part, then set the *CURLWS_OFFSET* with
+a zero *fragsize* for the following parts.
+
+If not sending a partial fragment or if this is raw mode, *fragsize*
+should be set to zero.
+
+If **CURLWS_RAW_MODE** is enabled in CURLOPT_WS_OPTIONS(3), the
+**flags** argument should be set to 0.
+
+To send a message consisting of multiple frames, set the *CURLWS_CONT* bit
+in all frames except the final one.
+
+# FLAGS
+
+## CURLWS_TEXT
+
+The buffer contains text data. Note that this makes a difference to WebSocket
+but libcurl itself does not make any verification of the content or
+precautions that you actually send valid UTF-8 content.
+
+## CURLWS_BINARY
+
+This is binary data.
+
+## CURLWS_CONT
+
+This is not the final fragment of the message, which implies that there is
+another fragment coming as part of the same message where this bit is not set.
+
+## CURLWS_CLOSE
+
+Close this transfer.
+
+## CURLWS_PING
+
+This is a ping.
+
+## CURLWS_PONG
+
+This is a pong.
+
+## CURLWS_OFFSET
+
+The provided data is only a partial fragment and there is more coming in a
+following call to *curl_ws_send()*. When sending only a piece of the
+fragment like this, the *fragsize* must be provided with the total
+expected fragment size in the first call and it needs to be zero in subsequent
+calls.
+
+# EXAMPLE
+
+~~~c
+#include <string.h> /* for strlen */
+
+const char *send_payload = "magic";
+
+int main(void)
+{
+ size_t sent;
+ CURLcode res;
+ CURL *curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L);
+ curl_easy_perform(curl);
+ res = curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0,
+ CURLWS_PING);
+ curl_easy_cleanup(curl);
+ return (int)res;
+}
+~~~
+
+# AVAILABILITY
+
+Added in 7.86.0.
+
+# RETURN VALUE
+
+*CURLE_OK* (zero) means that the data was sent properly, non-zero means an
+error occurred as *<curl/curl.h>* defines. See the libcurl-errors(3)
+man page for the full list with descriptions.