CURLOPT_TCP_NODELAY(3) Introduction to Library Functions
CURLOPT_TCP_NODELAY - the TCP_NODELAY option
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
Pass a long specifying whether the TCP_NODELAY option is to be set or
cleared (1L = set, 0 = clear). The option is set by default. This has
no effect after the connection has been established.
Setting this option to 1L disables the Nagle algorithm on connections
created using this handle. The purpose of this algorithm is to
minimize the number of small packets on the network (where "small
packets" means TCP segments less than the Maximum Segment Size for
the network).
Maximizing the amount of data sent per TCP segment is good because it
amortizes the overhead of the send. However, in some cases small
segments may need to be sent without delay. This is less efficient
than sending larger amounts of data at a time, and can contribute to
congestion on the network if overdone.
1
This functionality affects tcp only
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* leave Nagle enabled */
curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 0L);
curl_easy_perform(curl);
}
}
The default was changed to 1 from 0 in 7.50.2.
Added in curl 7.11.2
curl_easy_setopt(3) returns a CURLcode indicating success or error.
CURLE_OK (0) means everything was OK, non-zero means an error
occurred, see libcurl-errors(3).
CURLOPT_BUFFERSIZE(3), CURLOPT_SOCKOPTFUNCTION(3),
CURLOPT_TCP_KEEPALIVE(3)
libcurl 2026-01-08 CURLOPT_TCP_NODELAY(3)
NAME
CURLOPT_TCP_NODELAY - the TCP_NODELAY option
SYNOPSIS
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
DESCRIPTION
Pass a long specifying whether the TCP_NODELAY option is to be set or
cleared (1L = set, 0 = clear). The option is set by default. This has
no effect after the connection has been established.
Setting this option to 1L disables the Nagle algorithm on connections
created using this handle. The purpose of this algorithm is to
minimize the number of small packets on the network (where "small
packets" means TCP segments less than the Maximum Segment Size for
the network).
Maximizing the amount of data sent per TCP segment is good because it
amortizes the overhead of the send. However, in some cases small
segments may need to be sent without delay. This is less efficient
than sending larger amounts of data at a time, and can contribute to
congestion on the network if overdone.
DEFAULT
1
PROTOCOLS
This functionality affects tcp only
EXAMPLE
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* leave Nagle enabled */
curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 0L);
curl_easy_perform(curl);
}
}
HISTORY
The default was changed to 1 from 0 in 7.50.2.
AVAILABILITY
Added in curl 7.11.2
RETURN VALUE
curl_easy_setopt(3) returns a CURLcode indicating success or error.
CURLE_OK (0) means everything was OK, non-zero means an error
occurred, see libcurl-errors(3).
SEE ALSO
CURLOPT_BUFFERSIZE(3), CURLOPT_SOCKOPTFUNCTION(3),
CURLOPT_TCP_KEEPALIVE(3)
libcurl 2026-01-08 CURLOPT_TCP_NODELAY(3)