From edbb8ae97159a46a52bff13b1ecb5527a4153e33 Mon Sep 17 00:00:00 2001 From: Subodh Iyengar Date: Thu, 29 Sep 2016 06:42:10 -0700 Subject: [PATCH] Add tfo functions for apple Summary: Adds TFO functions for apple devices Also allows android as well by removing that restriction. Newer versions of android support TFO, so this allows us to experiment with them Reviewed By: yfeldblum Differential Revision: D3942664 fbshipit-source-id: faf439783b018cf7c987a2e3ade5ea6c0c02bf48 --- folly/detail/SocketFastOpen.cpp | 45 ++++++++++++++++++++++++++++++++- folly/detail/SocketFastOpen.h | 4 ++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/folly/detail/SocketFastOpen.cpp b/folly/detail/SocketFastOpen.cpp index 6ac35f94..fbca6e25 100644 --- a/folly/detail/SocketFastOpen.cpp +++ b/folly/detail/SocketFastOpen.cpp @@ -21,7 +21,7 @@ namespace folly { namespace detail { -#if FOLLY_ALLOW_TFO +#if FOLLY_ALLOW_TFO && defined(__linux__) #include #include @@ -62,6 +62,49 @@ bool tfo_succeeded(int sockfd) { return info.tcpi_options & TCPI_OPT_SYN_DATA; } +#elif FOLLY_ALLOW_TFO && defined(__APPLE__) + +#include +#include + +ssize_t tfo_sendmsg(int sockfd, const struct msghdr* msg, int flags) { + sa_endpoints_t endpoints; + endpoints.sae_srcif = 0; + endpoints.sae_srcaddr = nullptr; + endpoints.sae_srcaddrlen = 0; + endpoints.sae_dstaddr = (struct sockaddr*)msg->msg_name; + endpoints.sae_dstaddrlen = msg->msg_namelen; + int ret = connectx( + sockfd, + &endpoints, + SAE_ASSOCID_ANY, + CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, + nullptr, + 0, + nullptr, + nullptr); + + if (ret != 0) { + return ret; + } + ret = sendmsg(sockfd, msg, flags); + return ret; +} + +int tfo_enable(int sockfd, size_t max_queue_size) { + return setsockopt( + sockfd, + IPPROTO_TCP, + TCP_FASTOPEN, + &max_queue_size, + sizeof(max_queue_size)); +} + +bool tfo_succeeded(int sockfd) { + errno = EOPNOTSUPP; + return false; +} + #else ssize_t tfo_sendmsg(int sockfd, const struct msghdr* msg, int flags) { diff --git a/folly/detail/SocketFastOpen.h b/folly/detail/SocketFastOpen.h index fcd997b6..2b288d3d 100644 --- a/folly/detail/SocketFastOpen.h +++ b/folly/detail/SocketFastOpen.h @@ -19,10 +19,12 @@ #include #include -#if !defined(FOLLY_ALLOW_TFO) && defined(__linux__) && !defined(__ANDROID__) +#if !defined(FOLLY_ALLOW_TFO) +#if defined(__linux__) || defined(__APPLE__) // only allow for linux right now #define FOLLY_ALLOW_TFO 1 #endif +#endif namespace folly { namespace detail { -- 2.34.1