+ /* Consider only changed fds to minimize the operations on waitfdset */
+ OSSL_ASYNC_FD add_fd, del_fd;
+ size_t num_add_fds, num_del_fds;
+ if (!ASYNC_WAIT_CTX_get_changed_fds(loopargs[i].wait_ctx, NULL,
+ &num_add_fds, NULL, &num_del_fds)) {
+ BIO_printf(bio_err, "Failure in ASYNC_WAIT_CTX\n");
+ ERR_print_errors(bio_err);
+ error = 1;
+ break;
+ }
+ if (num_add_fds > 1 || num_del_fds > 1) {
+ BIO_printf(bio_err, "Too many fds have changed in ASYNC_WAIT_CTX\n");
+ ERR_print_errors(bio_err);
+ error = 1;
+ break;
+ }
+ if (num_add_fds == 0 && num_del_fds == 0)
+ continue;
+
+ ASYNC_WAIT_CTX_get_changed_fds(loopargs[i].wait_ctx, &add_fd, &num_add_fds,
+ &del_fd, &num_del_fds);
+
+ if (num_del_fds == 1)
+ FD_CLR(del_fd, &waitfdset);
+
+ if (num_add_fds == 1) {
+ FD_SET(add_fd, &waitfdset);
+ if (add_fd > max_fd)
+ max_fd = add_fd;
+ }