diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2017-04-14 01:18:56 +0300 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2017-04-14 12:22:50 +0300 |
commit | 5c90658fc2ebb326a22738d50c3752be7c9b96e2 (patch) | |
tree | dde4d4736d3df87ad4c0195c34a0bbc6a46899ae /lib/system | |
parent | c99d46b13c32027a49b9991ba525ad01b8a3da62 (diff) | |
download | gnutls-5c90658fc2ebb326a22738d50c3752be7c9b96e2.tar.gz |
lib/system/fastopen: simplified TCP fast open for OSXtmp-fast-open-macosx-fix
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/fastopen.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c index b2310dda49..18e82ee446 100644 --- a/lib/system/fastopen.c +++ b/lib/system/fastopen.c @@ -92,7 +92,7 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) if (likely(!p->connect_addrlen)) return sendmsg(fd, &hdr, p->flags); -#ifdef TCP_FASTOPEN_LINUX +# if defined(TCP_FASTOPEN_LINUX) if (!p->connect_only) { if (setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on)) == -1) _gnutls_debug_log("Failed to set socket option FASTOPEN\n"); @@ -113,16 +113,9 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) goto connect_only; } } - } else -#endif - { + } else { connect_only: -#ifdef TCP_FASTOPEN_OSX - 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); -#else ret = connect(fd, (struct sockaddr*)&p->connect_addr, p->connect_addrlen); -#endif if (errno == ENOTCONN || errno == EINPROGRESS) { gnutls_assert(); errno = EAGAIN; @@ -131,6 +124,23 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) if (ret == 0) p->connect_only = 0; } +# elif defined(TCP_FASTOPEN_OSX) + { + 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); + if (errno == ENOTCONN || errno == EINPROGRESS) { + gnutls_assert(); + errno = EAGAIN; + } + } +# else + ret = connect(fd, (struct sockaddr*)&p->connect_addr, p->connect_addrlen); + if (errno == ENOTCONN || errno == EINPROGRESS) { + gnutls_assert(); + errno = EAGAIN; + } +# endif if (ret == 0 || errno != EAGAIN) { /* This has to be called just once, connect info not needed any more */ @@ -139,7 +149,7 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) return ret; } -#endif +#endif /* sendmsg */ static int tfo_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) |