curl / Mailing Lists / curl-library / Single Mail
Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

Re: About a websockets write callback

From: Timothe Litt <>
Date: Fri, 17 Jun 2022 09:38:03 -0400

On 17-Jun-22 09:12, Weston Schmidt via curl-library wrote:
> I tend to agree that the existing function signature is a bit too restrictive.
> If you don't want a unique to WS function, how about adding a different
> variant across the board for folks?
> What about adding a CURLOPT_CTX_WRITEFUNCTION where a
> context object is passed that allows for access back to the curl object &
> access to metadata that might be specific to that function call, etc.
> If you want, you could replace the void *userdata with the ctx & then users
> could make a curl_ctx_get_userdata(ctx) vs add more arguments.
> For a WS, maybe only CURLOPT_CTX_WRITEFUNCTION is supported,
> but maybe this is an alternative callback to the existing write() format one?
> Wes

Or, use the existing callback, but have a CURLOPT to set the handle mode
so that the *userdata becomes a protocol-specific structure.  The
curlopt_set_write_callback_mode could take an enum, like "NORMAL,
WEBSOCKET, TELNET (e.g. for urgent data), ..." I would suggest not using
an extended_mode ON/OFF type argument since the requirements are likely
to evolve.

The struct would have a replacement userdata field, a type code, and a
type-specific union of whatever metadata applies.

This avoids creating a new callback and/or a "get metadata" (with the
attendant library storage).

Timothe Litt
ACM Distinguished Engineer
This communication may not represent the ACM or my employer's views,
if any, on the matters discussed.

Received on 2022-06-17