Transports

Learn more about customizing how the Sentry SDK sends data to Sentry.

The Native SDK uses Transports to send event payloads to Sentry. The default transport depends on the target platform:

  • Windows: WinHTTP
  • Linux: Curl
  • macOS: Curl

To specify a custom transport, use the sentry_options_set_transport function and supply a transport that implements the sentry_transport_t interface.

Copied
#include <sentry.h>

void custom_transport(sentry_envelope_t *envelope, void *state) {
  /*
   * Send the event here. If the transport requires state, such as an HTTP
   * client object or request queue, it can be specified in the `state`
   * parameter when configuring the transport. It will be passed as second
   * argument to this function.
   * The transport takes ownership of the `envelope`, and must free it once it
   * is done.
   */
  sentry_envelope_free(envelope);
}

int main(void) {
  void *transport_state = 0;

  sentry_options_t *options = sentry_options_new();
  sentry_transport_t *transport = sentry_transport_new(custom_transport);
  sentry_transport_set_state(transport, transport_state);

  sentry_options_set_transport(options, transport);
  sentry_init(options);

  /* ... */
}

The transport is invoked in the same thread as the call to sentry_capture_event. Consider to offload network communication to a background thread or thread pool to avoid blocking execution.

The Native SDK allows the configuration of an HTTP (CONNECT) or SOCKS5 proxy through which requests can be tunneled to our backend. It can be configured via the following option interface:

Copied
sentry_options_t *options = sentry_options_new();
sentry_options_set_proxy(options, "http://my.proxy:8080");
sentry_init(options);

/* ... */

The same function can also be used for the SOCKS5 proxy:

Copied
sentry_options_t *options = sentry_options_new();
sentry_options_set_proxy(options, "socks5://my.proxy:1080");
sentry_init(options);

/* ... */

We support HTTP proxies on all platforms, and SOCKS5 proxies on Linux and macOS. Depending on the platform, the transport provides a fallback in case the proxy is not reachabled. The following table shows the expected behaviour.

Platformhttp-proxysocks-proxy
WindowsInternal: fallback
Crashpad: fallback
N/A
LinuxInternal: fallback
Crashpad: fallback
Internal: no fallback
Crashpad: no fallback
macOSInternal: no fallback
Crashpad: no fallback
Internal: no fallback
Crashpad: fallback
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").