mirror of
https://github.com/openssl/openssl.git
synced 2024-12-09 05:51:54 +08:00
Handle partial data re-sending on ktls/sendfile on FreeBSD
Add a handler for EBUSY sendfile error in addition to EAGAIN. With EBUSY returned the data still can be partially sent and user code has to be notified about it, otherwise it may try to send data multiple times. Reviewed-by: Ben Kaduk <kaduk@mit.edu> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/13716)
This commit is contained in:
parent
3bc0b621a7
commit
dfcfd17f28
@ -120,7 +120,8 @@ For SSL_sendfile(), the following return values can occur:
|
||||
=item Z<>>= 0
|
||||
|
||||
The write operation was successful, the return value is the number
|
||||
of bytes of the file written to the TLS/SSL connection.
|
||||
of bytes of the file written to the TLS/SSL connection. The return
|
||||
value can be less than B<size> for a partial write.
|
||||
|
||||
=item E<lt> 0
|
||||
|
||||
|
@ -192,15 +192,12 @@ static ossl_inline int ktls_read_record(int fd, void *data, size_t length)
|
||||
static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off,
|
||||
size_t size, int flags)
|
||||
{
|
||||
off_t sbytes;
|
||||
off_t sbytes = 0;
|
||||
int ret;
|
||||
|
||||
ret = sendfile(fd, s, off, size, NULL, &sbytes, flags);
|
||||
if (ret == -1) {
|
||||
if (errno == EAGAIN && sbytes != 0)
|
||||
return sbytes;
|
||||
if (ret == -1 && sbytes == 0)
|
||||
return -1;
|
||||
}
|
||||
return sbytes;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user