libtls: Catch POLLHUP/NVAL in TLS socket splicing
authorMartin Willi <martin@revosec.ch>
Fri, 28 Nov 2014 14:50:58 +0000 (15:50 +0100)
committerMartin Willi <martin@revosec.ch>
Fri, 28 Nov 2014 14:53:50 +0000 (15:53 +0100)
If one of the sockets gets disconnected, some systems return POLLHUP. Signal
the socket as ready to let the read/write call fail properly.

src/libtls/tls_socket.c

index 9427b67..2ccd975 100644 (file)
@@ -308,7 +308,7 @@ METHOD(tls_socket_t, splice, bool,
                        DBG1(DBG_TLS, "TLS select error: %s", strerror(errno));
                        return FALSE;
                }
-               while (!plain_eof && pfd[0].revents & POLLIN)
+               while (!plain_eof && pfd[0].revents & (POLLIN | POLLHUP | POLLNVAL))
                {
                        in = read_(this, buf, sizeof(buf), FALSE);
                        switch (in)
@@ -341,7 +341,7 @@ METHOD(tls_socket_t, splice, bool,
                        }
                        break;
                }
-               if (!crypto_eof && pfd[1].revents & POLLIN)
+               if (!crypto_eof && pfd[1].revents & (POLLIN | POLLHUP | POLLNVAL))
                {
                        in = read(rfd, buf, sizeof(buf));
                        switch (in)