summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorolszomal <Malgorzata.Olszowka@stunnel.org>2024-04-04 11:34:33 +0200
committerTomas Mraz <tomas@openssl.org>2024-04-10 09:25:43 +0200
commit04dcf48dfd2653b9522002b050f174a825c71106 (patch)
treef3a03024d7b2202bcfc614a573196ee34cb2c9fb
parent86efc12f8011e5fa17e5ee2da3006060449a9e88 (diff)
Fix socket descriptor checks on Windows
Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24035) (cherry picked from commit c89baf871030c811ba316ccbdcea26c294f605ae)
-rw-r--r--crypto/bio/bio_lib.c8
-rw-r--r--crypto/bio/bio_sock.c4
2 files changed, 10 insertions, 2 deletions
diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c
index bb3c12ddbb..272189a9a6 100644
--- a/crypto/bio/bio_lib.c
+++ b/crypto/bio/bio_lib.c
@@ -965,8 +965,12 @@ static int bio_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds)
return 1;
#ifndef OPENSSL_NO_SOCK
- if (BIO_get_fd(bio, &fd) > 0 && fd < FD_SETSIZE)
- return BIO_socket_wait(fd, BIO_should_read(bio), max_time);
+ if (BIO_get_fd(bio, &fd) > 0) {
+ int ret = BIO_socket_wait(fd, BIO_should_read(bio), max_time);
+
+ if (ret != -1)
+ return ret;
+ }
#endif
/* fall back to polling since no sockets are available */
diff --git a/crypto/bio/bio_sock.c b/crypto/bio/bio_sock.c
index 7aa7bdc65e..52b11fa8c1 100644
--- a/crypto/bio/bio_sock.c
+++ b/crypto/bio/bio_sock.c
@@ -435,7 +435,11 @@ int BIO_socket_wait(int fd, int for_read, time_t max_time)
struct timeval tv;
time_t now;
+#ifdef _WIN32
+ if ((SOCKET)fd == INVALID_SOCKET)
+#else
if (fd < 0 || fd >= FD_SETSIZE)
+#endif
return -1;
if (max_time == 0)
return 1;