1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2025-02-02 15:07:36 -05:00

Fix: Fixes EPIPEs on TLS clients

Correctly handle died TLS connections on recent libssl.

Closes: #2413
This commit is contained in:
Philipp Schafft 2021-10-26 18:59:51 +00:00
parent ec02a7b53d
commit 52634884ac
2 changed files with 17 additions and 3 deletions

View File

@ -206,8 +206,6 @@ static int connection_send_tls(connection_t *con, const void *buf, size_t len)
ssize_t bytes = tls_write(con->tls, buf, len); ssize_t bytes = tls_write(con->tls, buf, len);
if (bytes < 0) { if (bytes < 0) {
if (tls_want_io(con->tls) > 0)
return -1;
con->error = 1; con->error = 1;
} else { } else {
con->sent_bytes += bytes; con->sent_bytes += bytes;

View File

@ -260,10 +260,26 @@ ssize_t tls_read(tls_t *tls, void *buffer, size_t len)
} }
ssize_t tls_write(tls_t *tls, const void *buffer, size_t len) ssize_t tls_write(tls_t *tls, const void *buffer, size_t len)
{ {
int ret;
if (!tls) if (!tls)
return -1; return -1;
return SSL_write(tls->ssl, buffer, len); ret = SSL_write(tls->ssl, buffer, len);
if (ret <= 0) {
switch (SSL_get_error(tls->ssl, ret)) {
case SSL_ERROR_SYSCALL:
case SSL_ERROR_SSL:
return -1;
break;
default:
return 0;
break;
}
}
return ret;
} }
#else #else
void tls_initialize(void) void tls_initialize(void)