OpenSuSE Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
x SuSE Linux 13.1-RELEASE x
x SuSE Linux 13.1-RELEASEx
libcurl(3)                          libcurl                         libcurl(3)

NAME
       libcurl-ws - WebSocket interface overview

DESCRIPTION
       The  WebSocket  interface  provides functions for receiving and sending
       WebSocket data.

INCLUDE
       You still only include <curl/curl.h> in your code.

SETUP
       WebSocket is also often known as WebSockets, in plural. It is  done  by
       upgrading a regular HTTP(S) GET request to a WebSocket connection.

       WebSocket  is a TCP-like message-based communication protocol done over
       HTTP, specified in RFC 6455.

       To initiate a WebSocket session with libcurl, setup an easy  handle  to
       use a URL with a "WS://" or "WSS://" scheme. "WS" is for cleartext com-
       munication over HTTP and "WSS" is for  doing  WebSocket  securely  over
       HTTPS.

       A  WebSocket  request is done as an HTTP/1 GET request with an "Upgrade
       WebSocket" request header field. When the upgrade is  accepted  by  the
       server,  it responds with a 101 Switching and then the client can speak
       WebSocket with the server. The communication can happen in both  direc-
       tions at the same time.

MESSAGES
       WebSocket  communication  is  message  based. That means that both ends
       send and receive entire messages, not streams  like  TCP.  A  WebSocket
       message  is  sent  over the wire in one or more frames. Each frame in a
       message can have a size up to 2^63 bytes.

       libcurl delivers WebSocket data as frame fragments.  It  might  send  a
       whole frame, but it might also deliver them in pieces depending on size
       and network patterns. It makes sure to provide the API user  about  the
       exact  specifics  about  the  fragment: type, offset, size and how much
       data there is pending to arrive for the same frame.

       A message has an unknown size until the last frame header for the  mes-
       sage has been received since only frames have set sizes.

Raw mode
       libcurl  can  be  told  to speak WebSocket in "raw mode" by setting the
       CURLWS_RAW_MODE bit to the CURLOPT_WS_OPTIONS(3) option.

       Raw WebSocket means that libcurl passes on the data  from  the  network
       without  parsing it leaving that entirely to the application. This mode
       assumes that the user of this knows WebSocket and can parse and  figure
       out the data all by itself.

       This  mode  is  intended for applications that already have a WebSocket
       parser/engine that want to switch over to use libcurl for enabling Web-
       Socket, but keep parts of the existing software architecture.

PING
       WebSocket is designed to allow long-lived sessions and in order to keep
       the connections alive, both ends can send PING messages for  the  other
       end to respond with a PONG.

       libcurl  automatically responds to server PING messages with a PONG. It
       does not send any PING messages automatically.

MODELS
       Because of the many different ways WebSocket can be used, which is much
       more  flexible  than  limited  to  plain  downloads or uploads, libcurl
       offers two different API models to use it:

       1. Using a write callback with CURLOPT_WRITEFUNCTION(3) much like other
       downloads for when the traffic is download oriented.

       2.  Using CURLOPT_CONNECT_ONLY(3) and use the WebSocket recv/send func-
       tions.

Callback model
       When a write callback is set and a WebSocket transfer is performed, the
       callback is called to deliver all WebSocket data that arrives.

       The  callback  can then call curl_ws_meta(3) to learn about the details
       of the incoming data fragment.

CONNECT_ONLY model
       By setting CURLOPT_CONNECT_ONLY(3) to 2L, the transfer only establishes
       and setups the WebSocket communication and then returns control back to
       the application.

       Once such a setup has been successfully performed, the application  can
       proceed  and use curl_ws_recv(3) and curl_ws_send(3) freely to exchange
       WebSocket messages with the server.

AVAILABILITY
       The WebSocket API was introduced as experimental in 7.86.0 and is still
       experimental today.

       It is only built-in if explicitly opted in at build time. We discourage
       use of the WebSocket API in  production  because  of  its  experimental
       state. We might change API, ABI and behavior before this "goes live".

SEE ALSO
       curl_easy_init(3),  curl_ws_meta(3),  curl_ws_recv(3), curl_ws_send(3),
       CURLOPT_CONNECT_ONLY(3),         CURLOPT_WRITEFUNCTION(3),         CUR-
       LOPT_WS_OPTIONS(3)

libcurl 8.4.0                 September 26, 2023                    libcurl(3)

Want to link to this manual page? Use this URL:
<
http://star2.abcm.com/cgi-bin/bsdi-man?query=libcurl-ws&sektion=3&manpath=>

home | help