summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2017-04-14 01:18:56 +0300
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2017-04-14 12:22:50 +0300
commit5c90658fc2ebb326a22738d50c3752be7c9b96e2 (patch)
treedde4d4736d3df87ad4c0195c34a0bbc6a46899ae
parentc99d46b13c32027a49b9991ba525ad01b8a3da62 (diff)
downloadgnutls-tmp-fast-open-macosx-fix.tar.gz
lib/system/fastopen: simplified TCP fast open for OSXtmp-fast-open-macosx-fix
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r--lib/system/fastopen.c30
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)