|
|
@ -68,8 +68,25 @@ streamRead(Stream this, void * buf, size_t count) |
|
|
|
|
|
|
|
|
if (0 >= done) { |
|
|
if (0 >= done) { |
|
|
switch (SSL_get_error((this->handle).ssl, done)) { |
|
|
switch (SSL_get_error((this->handle).ssl, done)) { |
|
|
case SSL_ERROR_SSL: |
|
|
|
|
|
case SSL_ERROR_SYSCALL: |
|
|
case SSL_ERROR_SYSCALL: |
|
|
|
|
|
{ |
|
|
|
|
|
switch (errno) { |
|
|
|
|
|
case EINTR: |
|
|
|
|
|
case ENOBUFS: |
|
|
|
|
|
case ENOMEM: |
|
|
|
|
|
done = 0; |
|
|
|
|
|
break; |
|
|
|
|
|
case (EAGAIN|EWOULDBLOCK): |
|
|
|
|
|
done = -1; |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
done = -2; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case SSL_ERROR_SSL: |
|
|
{ |
|
|
{ |
|
|
unsigned long err; |
|
|
unsigned long err; |
|
|
|
|
|
|
|
|
@ -83,6 +100,7 @@ streamRead(Stream this, void * buf, size_t count) |
|
|
// DROP THROUGH |
|
|
// DROP THROUGH |
|
|
|
|
|
|
|
|
case SSL_ERROR_ZERO_RETURN: |
|
|
case SSL_ERROR_ZERO_RETURN: |
|
|
|
|
|
default: |
|
|
done = -2; |
|
|
done = -2; |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|