Check for errors on write. Since SIGPIPE is ignored, play nicely with pipelines by aborting on EPIPE. --- src/apps/s_server.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/apps/s_server.c b/src/apps/s_server.c index 77384ec..836d46b 100644 --- a/src/apps/s_server.c +++ b/src/apps/s_server.c @@ -1760,8 +1760,11 @@ sv_body(char *hostname, int s, unsigned char *context) i = SSL_read(con, (char *) buf, bufsize); switch (SSL_get_error(con, i)) { case SSL_ERROR_NONE: - write(fileno(stdout), buf, - (unsigned int) i); + if (write(fileno(stdout), buf, i) == -1) { + if (errno == EPIPE) { + abort(); + } + } if (SSL_pending(con)) goto again; break; -- 1.9.3