Commit fe196783f7 for openssl.org

commit fe196783f75d3a70d584fa5e6f58da50d442cac4
Author: Liu-ErMeng <liuermeng2@huawei.com>
Date:   Thu Apr 16 18:32:00 2026 -0700

    sock_read: check ret==0 before BIO_sock_should_retry()

    POSIX states errno is only valid when the return value indicates an
    error.  recv() sets errno only on -1; when it returns 0 (peer closed)
    errno is unspecified.

    Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
    Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
    MergeDate: Mon Apr 20 09:59:27 2026
    (Merged from https://github.com/openssl/openssl/pull/30877)

diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c
index 86f823dd28..ef25ccada5 100644
--- a/crypto/bio/bss_sock.c
+++ b/crypto/bio/bss_sock.c
@@ -118,10 +118,10 @@ static int sock_read(BIO *b, char *out, int outl)
             ret = readsocket(b->num, out, outl);
         BIO_clear_retry_flags(b);
         if (ret <= 0) {
-            if (BIO_sock_should_retry(ret))
-                BIO_set_retry_read(b);
-            else if (ret == 0)
+            if (ret == 0)
                 b->flags |= BIO_FLAGS_IN_EOF;
+            else if (BIO_sock_should_retry(ret))
+                BIO_set_retry_read(b);
         }
     }
     return ret;