.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, 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.haxx.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 "31 Oct 2018" "libcurl 7.62.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
