]> ruderich.org/simon Gitweb - tlsproxy/tlsproxy.git/blobdiff - lib/tlsproxyhelper.c
tlsproxyhelper.c: Split POLLERR and POLLHUP check.
[tlsproxy/tlsproxy.git] / lib / tlsproxyhelper.c
index a37e0224dc9eac6332a1a0a11b3dd5a3f61531c1..53dc9e8e0b9b4e81cc38c2abb1e66d5aa38d7b9c 100644 (file)
@@ -1,3 +1,16 @@
+/*
+ * Simple LD_PRELOAD wrapper for connect() which uses tlsproxy as proxy for
+ * programs which don't support setting a TLS proxy.
+ *
+ * The following environment variables can be used:
+ *
+ * - TLSPROXYHELPER_PORT: port where tlsproxy is running (default 9000)
+ *
+ * If an error occurs -1 is returned and errno is set (either EAFNOSUPPORT if
+ * another protocol besides IPv4/IPv6 was used, or EINVAL if another error
+ * occurred). The error is written to stderr with "tlsproxyhelper:" as prefix.
+ */
+
 /*
  * Copyright (C) 2011-2013  Simon Ruderich
  *
@@ -172,7 +185,7 @@ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
             return -1;
         }
         if (optval != 0) {
-            fprintf(stderr, LOG_PREFIX "connect() failed (SO_ERROR)");
+            fprintf(stderr, LOG_PREFIX "connect() failed (SO_ERROR)\n");
             errno = EINVAL;
             return -1;
         }
@@ -259,8 +272,12 @@ static int poll_for(int sockfd, int mode) {
         return -1;
     }
 
-    if (fds[0].revents & POLLERR || fds[0].revents & POLLHUP) {
-        fprintf(stderr, LOG_PREFIX "poll(): POLLERR | POLLHUP\n");
+    if (fds[0].revents & POLLERR) {
+        fprintf(stderr, LOG_PREFIX "poll(): POLLERR\n");
+        return -1;
+    }
+    if (fds[0].revents & POLLHUP) {
+        fprintf(stderr, LOG_PREFIX "poll(): POLLHUP\n");
         return -1;
     }