diff options
author | Daiki Ueno <ueno@gnu.org> | 2020-09-03 14:16:08 +0000 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2020-09-03 14:16:08 +0000 |
commit | 999525211e1a5a22194411a4b078259137f5fe19 (patch) | |
tree | 3927532d2baa80554b30d4d446d5250868f988a2 /lib/system/fastopen.c | |
parent | 3c137c9f2888334596fb9f4313d4389d39afe8fd (diff) | |
parent | b0be5d7c39d4a5f7d29db4630926a4cef7c3edce (diff) | |
download | gnutls-999525211e1a5a22194411a4b078259137f5fe19.tar.gz |
Merge branch 'tmp-backport-3.6' into 'gnutls_3_6_x'
Backport bug fixes from master to gnutls_3_6_x
See merge request gnutls/gnutls!1317
Diffstat (limited to 'lib/system/fastopen.c')
-rw-r--r-- | lib/system/fastopen.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c index 8d8409e482..bf1ee0929f 100644 --- a/lib/system/fastopen.c +++ b/lib/system/fastopen.c @@ -38,7 +38,9 @@ /* TCP Fast Open on OSX behaves differently from Linux, so define these helpers */ #if defined __APPLE__ && defined __MACH__ && defined CONNECT_DATA_IDEMPOTENT && defined CONNECT_RESUME_ON_READ_WRITE -# define TCP_FASTOPEN_OSX +# if defined __has_builtin && __has_builtin(__builtin_available) +# define TCP_FASTOPEN_OSX +# endif #elif defined TCP_FASTOPEN && defined MSG_FASTOPEN # define TCP_FASTOPEN_LINUX #endif @@ -129,9 +131,15 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) } # elif defined(TCP_FASTOPEN_OSX) { - sa_endpoints_t endpoints = { .sae_dstaddr = (struct sockaddr*)&p->connect_addr, .sae_dstaddrlen = p->connect_addrlen }; + if(__builtin_available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *)) { + sa_endpoints_t endpoints = { .sae_dstaddr = (struct sockaddr*)&p->connect_addr, .sae_dstaddrlen = p->connect_addrlen }; - ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL); + ret = connectx(fd, &endpoints, SAE_ASSOCID_ANY, CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT, NULL, 0, NULL, NULL); + } + else + { + ret = connect(fd, (struct sockaddr*)&p->connect_addr, p->connect_addrlen); + } if (errno == ENOTCONN || errno == EINPROGRESS) { gnutls_assert(); errno = EAGAIN; |