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:
parent
ec02a7b53d
commit
52634884ac
@ -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;
|
||||||
|
18
src/tls.c
18
src/tls.c
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user