From ae45db860e6fe628c8e2fa107ee6b7dacd3aacbe Mon Sep 17 00:00:00 2001 From: Vladislav Grishenko Date: Fri, 1 Dec 2017 18:00:20 +0500 Subject: sstp: fix eof result of ssl read/write ops although no harm was really happened --- accel-pppd/ctrl/sstp/sstp.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'accel-pppd/ctrl') diff --git a/accel-pppd/ctrl/sstp/sstp.c b/accel-pppd/ctrl/sstp/sstp.c index 9ecd1f6e..5953a1ca 100644 --- a/accel-pppd/ctrl/sstp/sstp.c +++ b/accel-pppd/ctrl/sstp/sstp.c @@ -406,20 +406,21 @@ static ssize_t ssl_stream_read(struct sstp_stream_t *stream, void *buf, size_t c ERR_clear_error(); ret = SSL_read(stream->ssl, buf, count); + if (ret > 0) + return ret; + err = SSL_get_error(stream->ssl, ret); switch (err) { - case SSL_ERROR_NONE: - case SSL_ERROR_ZERO_RETURN: - return ret; case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: errno = EAGAIN; /* fall through */ + case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_SYSCALL: - return -1; + return ret; default: errno = EIO; - return -1; + return ret; } } @@ -429,20 +430,21 @@ static ssize_t ssl_stream_write(struct sstp_stream_t *stream, const void *buf, s ERR_clear_error(); ret = SSL_write(stream->ssl, buf, count); + if (ret > 0) + return ret; + err = SSL_get_error(stream->ssl, ret); switch (err) { - case SSL_ERROR_NONE: - case SSL_ERROR_ZERO_RETURN: - return ret; case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: errno = EAGAIN; /* fall through */ + case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_SYSCALL: - return -1; + return ret; default: errno = EIO; - return -1; + return ret; } } -- cgit v1.2.3