An application can receive WebSocket data two different ways, but there is
only one way for it to send data over the connection: the curl_ws_send()
function.
CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen,
size_t *sent, curl_off_t fragsize,
unsigned int sendflags);
curl
- transfer handle
buffer
- pointer to the frame data to send
buflen
- length of the data (in bytes) in buffer
fragsize
- the total size of the whole fragment, used when sending only a
part of a larger fragment.
sent
- number of bytes that were sent
flags
- bitmask describing the data. See bit descriptions below.
To send a complete WebSocket fragment, set fragsize
to zero and provide data
for all other arguments.
To send a fragment in smaller pieces: send the first part with fragsize
set
to the total fragment size. You must know and provide the size of the
entire fragment before you can send it. In subsequent calls to
curl_ws_send()
you send the next pieces of the fragment with fragsize
set
to zero but with the CURLWS_OFFSET
bit sets in the flags
argument. Repeat
until all pieces have been sent that constitute the whole fragment.
The buffer contains text data. Note that this makes a difference to WebSocket but libcurl itself does not perform any verification of the content or make any precautions that you actually send valid UTF-8 content.
This is binary data.
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.
Close this transfer.
This as a ping.
This as a pong.
The provided data is only a partial fragment and there is more data 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
frame size in the first call and it needs to be zero in subsequent calls.
When CURLWS_OFFSET
is set, no other flag bits should be set as this is a
continuation of a previous send and the bits describing the fragments were set
then.