connect: add support for new TCP Fast Open API on Linux

The new API added in Linux 4.11 only requires setting a socket option
before connecting, without the whole sento() machinery.

Notably, this makes it possible to use TFO with SSL connections on Linux
as well, without the need to mess around with OpenSSL (or whatever other
SSL library) internals.

Closes #2056
This commit is contained in:
Alessandro Ghedini 2017-11-05 23:59:55 +00:00 committed by Daniel Stenberg
parent 9f691be3d4
commit 979b012eeb
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 28 additions and 5 deletions

View file

@ -22,6 +22,10 @@
#include "curl_setup.h"
#ifdef HAVE_LINUX_TCP_H
#include <linux/tcp.h>
#endif
#include <curl/curl.h>
#include "urldata.h"
@ -360,7 +364,7 @@ ssize_t Curl_send_plain(struct connectdata *conn, int num,
available. */
pre_receive_plain(conn, num);
#ifdef MSG_FASTOPEN /* Linux */
#if defined(MSG_FASTOPEN) && !defined(TCP_FASTOPEN_CONNECT) /* Linux */
if(conn->bits.tcp_fastopen) {
bytes_written = sendto(sockfd, mem, len, MSG_FASTOPEN,
conn->ip_addr->ai_addr, conn->ip_addr->ai_addrlen);