]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
lib/system/fastopen: simplified TCP fast open for OSX
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 13 Apr 2017 22:18:56 +0000 (01:18 +0300)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 14 Apr 2017 17:53:29 +0000 (20:53 +0300)
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
lib/system/fastopen.c

index b2310dda49456e4f98497d0dc98d38cb4a3aa284..18e82ee4468180033610a85b4b7f6a4417079ae6 100644 (file)
@@ -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)