diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index f9c61748efdd..05e49ee97a84 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -1314,13 +1314,14 @@ static ssize_t my_recv_wrapper_with_restart(php_socket_t fd, void *buf, size_t s return n; } -static int single_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t size) { +static ssize_t single_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t size) { #ifdef HAVE_FTP_SSL int err; bool retry = false; SSL *handle = NULL; php_socket_t fd; size_t sent; + int ret; if (ftp->use_ssl && ftp->fd == s && ftp->ssl_active) { handle = ftp->ssl_handle; @@ -1333,8 +1334,8 @@ static int single_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t size) { } do { - sent = SSL_write(handle, buf, size); - err = SSL_get_error(handle, sent); + ret = SSL_write_ex(handle, buf, size, &sent); + err = SSL_get_error(handle, ret); switch (err) { case SSL_ERROR_NONE: @@ -1343,6 +1344,7 @@ static int single_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t size) { case SSL_ERROR_ZERO_RETURN: retry = false; + sent = 0; SSL_shutdown(handle); break;