+#ifdef TCP_STEALTH
+/**
+ * Open TCP socket with TCP STEALTH enabled.
+ *
+ * @param clientp our `struct GNUNET_ATS_Session *`
+ * @param purpose why does curl want to open a socket
+ * @param address what kind of socket does curl want to have opened?
+ * @return opened socket
+ */
+static curl_socket_t
+open_tcp_stealth_socket_cb (void *clientp,
+ curlsocktype purpose,
+ struct curl_sockaddr *address)
+{
+ struct GNUNET_ATS_Session *s = clientp;
+ int ret;
+
+ switch (purpose)
+ {
+ case CURLSOCKTYPE_IPCXN:
+ ret = socket (address->family,
+ address->socktype,
+ address->protocol);
+ if (-1 == ret)
+ return CURL_SOCKET_BAD;
+ if ( ( (SOCK_STREAM != address->socktype) ||
+ ( (0 != address->protocol) &&
+ (IPPROTO_TCP != address->protocol))) )
+ return (curl_socket_t) ret;
+ if ( (0 != setsockopt (ret,
+ IPPROTO_TCP,
+ TCP_STEALTH,
+ &s->address->peer,
+ sizeof (struct GNUNET_PeerIdentity))) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("TCP_STEALTH not supported on this platform.\n"));
+ (void) close (ret);
+ return CURL_SOCKET_BAD;
+ }
+ return (curl_socket_t) ret;
+ case CURLSOCKTYPE_ACCEPT:
+ GNUNET_break (0);
+ return CURL_SOCKET_BAD;
+ break;
+ case CURLSOCKTYPE_LAST:
+ GNUNET_break (0);
+ return CURL_SOCKET_BAD;
+ default:
+ GNUNET_break (0);
+ return CURL_SOCKET_BAD;
+ }
+}
+#endif
+
+