| =pod |
| |
| =head1 NAME |
| |
| SSL_accept_stream, SSL_get_accept_stream_queue_len, SSL_ACCEPT_STREAM_NO_BLOCK, |
| SSL_ACCEPT_STREAM_UNI, SSL_ACCEPT_STREAM_BIDI - |
| accept an incoming QUIC stream from a QUIC peer |
| |
| =head1 SYNOPSIS |
| |
| #include <openssl/ssl.h> |
| |
| #define SSL_ACCEPT_STREAM_NO_BLOCK |
| #define SSL_ACCEPT_STREAM_UNI |
| #define SSL_ACCEPT_STREAM_BIDI |
| |
| SSL *SSL_accept_stream(SSL *ssl, uint64_t flags); |
| |
| size_t SSL_get_accept_stream_queue_len(SSL *ssl); |
| |
| =head1 DESCRIPTION |
| |
| The SSL_accept_stream() function attempts to dequeue an incoming stream from the |
| given QUIC connection SSL object and returns the newly allocated QUIC stream SSL |
| object. |
| |
| If the queue of incoming streams is empty, this function returns NULL (in |
| nonblocking mode) or waits for an incoming stream (in blocking mode). This |
| function may still return NULL in blocking mode, for example if the underlying |
| connection is terminated. |
| |
| The caller is responsible for managing the lifetime of the returned QUIC stream |
| SSL object; for more information, see L<SSL_free(3)>. |
| |
| This function will block if the QUIC connection SSL object is configured in |
| blocking mode (see L<SSL_set_blocking_mode(3)>), but this may be bypassed by |
| passing the flag B<SSL_ACCEPT_STREAM_NO_BLOCK> in I<flags>. If this flag is set, |
| this function never blocks. |
| |
| By default, this function will return the first incoming stream, whether it is |
| unidirectional or bidirectional. Passing the flag B<SSL_ACCEPT_STREAM_UNI> or |
| B<SSL_ACCEPT_STREAM_BIDI> will return the first stream that is unidirectional or |
| bidirectional, respectively. If these flags are both set, either type can be |
| returned. A NULL return value may mean that there are still streams that can |
| be dequeued. |
| |
| Calling SSL_accept_stream() if there is no default stream already present |
| inhibits the future creation of a default stream. See L<openssl-quic(7)>. |
| |
| SSL_get_accept_stream_queue_len() returns the number of incoming streams |
| currently waiting in the accept queue. |
| |
| These functions can be used from multiple threads for the same QUIC connection. |
| |
| Depending on whether default stream functionality is being used, it may be |
| necessary to explicitly configure the incoming stream policy before streams can |
| be accepted; see L<SSL_set_incoming_stream_policy(3)>. See also |
| L<openssl-quic(7)/MODES OF OPERATION> for more information on default stream |
| functionality. |
| |
| =head1 RETURN VALUES |
| |
| SSL_accept_stream() returns a newly allocated QUIC stream SSL object, or NULL if |
| no new incoming streams are available, or if the connection has been terminated, |
| or if called on an SSL object other than a QUIC connection SSL object. |
| L<SSL_get_error(3)> can be used to obtain further information in this case. |
| |
| SSL_get_accept_stream_queue_len() returns the number of incoming streams |
| currently waiting in the accept queue, or 0 if called on an SSL object other than |
| a QUIC connection SSL object. |
| |
| =head1 SEE ALSO |
| |
| L<openssl-quic(7)/MODES OF OPERATION>, L<SSL_new_stream(3)>, |
| L<SSL_set_blocking_mode(3)>, L<SSL_free(3)> |
| |
| =head1 HISTORY |
| |
| SSL_accept_stream() and SSL_get_accept_stream_queue_len() were added in OpenSSL |
| 3.2. |
| |
| =head1 COPYRIGHT |
| |
| Copyright 2002-2025 The OpenSSL Project Authors. All Rights Reserved. |
| |
| Licensed under the Apache License 2.0 (the "License"). You may not use |
| this file except in compliance with the License. You can obtain a copy |
| in the file LICENSE in the source distribution or at |
| L<https://www.openssl.org/source/license.html>. |
| |
| =cut |