libtls: Catch POLLHUP/NVAL in TLS socket splicing

If one of the sockets gets disconnected, some systems return POLLHUP. Signal
the socket as ready to let the read/write call fail properly.
This commit is contained in:
Martin Willi 2014-11-28 15:50:58 +01:00
parent 015fb3134d
commit 4ef819a379

View 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)