27 #if FOLLY_ALLOW_TFO && defined(__linux__) 31 #if !defined(MSG_FASTOPEN) 32 #define MSG_FASTOPEN 0x20000000 35 #if !defined(TCP_FASTOPEN) 36 #define TCP_FASTOPEN 23 39 #if !defined(TCPI_OPT_SYN_DATA) 40 #define TCPI_OPT_SYN_DATA 32 44 flags |= MSG_FASTOPEN;
45 return sendmsg(sockfd, msg, flags);
48 int tfo_enable(
int sockfd,
size_t max_queue_size) {
50 sockfd, SOL_TCP, TCP_FASTOPEN, &max_queue_size,
sizeof(max_queue_size));
56 socklen_t info_len =
sizeof(
info);
58 if (
getsockopt(sockfd, IPPROTO_TCP, TCP_INFO, &
info, &info_len) != 0) {
62 return info.tcpi_options & TCPI_OPT_SYN_DATA;
65 #elif FOLLY_ALLOW_TFO && defined(__APPLE__) 68 sa_endpoints_t endpoints;
69 endpoints.sae_srcif = 0;
70 endpoints.sae_srcaddr =
nullptr;
71 endpoints.sae_srcaddrlen = 0;
72 endpoints.sae_dstaddr = (
struct sockaddr*)msg->msg_name;
73 endpoints.sae_dstaddrlen = msg->msg_namelen;
78 CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,
87 ret =
sendmsg(sockfd, msg, flags);
91 int tfo_enable(
int sockfd,
size_t max_queue_size) {
97 sizeof(max_queue_size));
ssize_t sendmsg(NetworkSocket socket, const msghdr *message, int flags)
int setsockopt(NetworkSocket s, int level, int optname, const void *optval, socklen_t optlen)
—— Concurrent Priority Queue Implementation ——
int getsockopt(NetworkSocket s, int level, int optname, void *optval, socklen_t *optlen)
int tfo_enable(int, size_t)
ssize_t tfo_sendmsg(int, const struct msghdr *, int)