| 865 pool_free(ssl->pool, st); |
864 pool_free(ssl->pool, st); |
| 866 } |
865 } |
| 867 |
866 |
| 868 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes) { |
867 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes) { |
| 869 int ret = SSL_write(st->ssl, buf, nbytes); |
868 int ret = SSL_write(st->ssl, buf, nbytes); |
| 870 log_ereport(LOG_INFORM, "SSL_write(%p, %d) -> %d", buf, (int)nbytes, ret); |
|
| 871 if(ret <= 0) { |
869 if(ret <= 0) { |
| 872 st->error = SSL_get_error(st->ssl, ret); |
870 st->error = SSL_get_error(st->ssl, ret); |
| 873 if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) { |
871 if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) { |
| 874 st->st.io_errno = EWOULDBLOCK; |
872 st->st.io_errno = EWOULDBLOCK; |
| 875 } else { |
873 } else { |
| 888 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt) { |
886 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt) { |
| 889 ssize_t r = 0; |
887 ssize_t r = 0; |
| 890 for(int i=0;i<iovcnt;i++) { |
888 for(int i=0;i<iovcnt;i++) { |
| 891 int ml = iovec[i].iov_len > 10 ? 10 : iovec[i].iov_len; |
889 int ml = iovec[i].iov_len > 10 ? 10 : iovec[i].iov_len; |
| 892 int ret = SSL_write(st->ssl, iovec[i].iov_base, iovec[i].iov_len); |
890 int ret = SSL_write(st->ssl, iovec[i].iov_base, iovec[i].iov_len); |
| 893 log_ereport(LOG_INFORM, "SSL_write(%p {%.*s}, %d) -> %d", iovec[i].iov_base, ml, iovec[i].iov_base, (int)iovec[i].iov_len, ret); |
|
| 894 if(ret <= 0) { |
891 if(ret <= 0) { |
| 895 if(r == 0) { |
892 if(r == 0) { |
| 896 st->error = SSL_get_error(st->ssl, ret); |
893 st->error = SSL_get_error(st->ssl, ret); |
| 897 log_ereport(LOG_FAILURE, "net_ssl_write SSL error: %d , iov_len: %d, ret: %d", st->error, (int)iovec[i].iov_len, ret); |
894 log_ereport(LOG_FAILURE, "net_ssl_write SSL error: %d , iov_len: %d, ret: %d", st->error, (int)iovec[i].iov_len, ret); |
| 898 if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) { |
895 if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) { |