diff --git a/lib/ssh.c b/lib/ssh.c
index e7935ad243e5de4ea90404e058b0041f61480dff..bc7d3eb41a061b0169ee4ad63a14ff1beb826050 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -1573,8 +1573,14 @@ CURLcode Curl_sftp_do(struct connectdata *conn, bool *done)
               char linkPath[PATH_MAX + 1];
 
               snprintf(linkPath, PATH_MAX, "%s%s", sftp->path, filename);
+#if (LIBSSH2_APINO >= 200706012030)
+              while ((len = libssh2_sftp_readlink(sftp->sftp_session, linkPath,
+                                                  filename, PATH_MAX)) ==
+                     LIBSSH2_ERROR_EAGAIN);
+#else /* !(LIBSSH2_APINO >= 200706012030) */
               len = libssh2_sftp_readlink(sftp->sftp_session, linkPath,
                                           filename, PATH_MAX);
+#endif /* !(LIBSSH2_APINO >= 200706012030) */
               line = realloc(line, totalLen + 4 + len);
               if (!line)
                 return CURLE_OUT_OF_MEMORY;