.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_upkeep 3 "November 05, 2020" "libcurl 7.78.0" "libcurl Manual"

.SH NAME
curl_easy_upkeep - Perform any connection upkeep checks.
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURLcode curl_easy_upkeep(CURL *" handle ");"
.SH DESCRIPTION

Some protocols have "connection upkeep" mechanisms. These mechanisms usually
send some traffic on existing connections in order to keep them alive; this
can prevent connections from being closed due to overzealous firewalls, for
example.

Currently the only protocol with a connection upkeep mechanism is HTTP/2: when
the connection upkeep interval is exceeded and \fIcurl_easy_upkeep(3)\fP
is called, an HTTP/2 PING frame is sent on the connection.

This function must be explicitly called in order to perform the upkeep work.
The connection upkeep interval is set with
\fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP.

.SH AVAILABILITY
Added in 7.62.0.
.SH RETURN VALUE
On success, returns \fBCURLE_OK\fP.

On failure, returns the appropriate error code.

.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  /* Make a connection to an HTTP/2 server. */
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");

  /* Set the interval to 30000ms / 30s */
  curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);

  curl_easy_perform(curl);

  /* Perform more work here. */

  /* While the connection is being held open, curl_easy_upkeep() can be
     called. If curl_easy_upkeep() is called and the time since the last
     upkeep exceeds the interval, then an HTTP/2 PING is sent. */
  curl_easy_upkeep(curl);

  /* Perform more work here. */

  /* always cleanup */
  curl_easy_cleanup(curl);
}

.fi
