1=pod 2 3=head1 NAME 4 5SSL_accept_stream, SSL_get_accept_stream_queue_len, SSL_ACCEPT_STREAM_NO_BLOCK, 6SSL_ACCEPT_STREAM_UNI, SSL_ACCEPT_STREAM_BIDI - 7accept an incoming QUIC stream from a QUIC peer 8 9=head1 SYNOPSIS 10 11 #include <openssl/ssl.h> 12 13 #define SSL_ACCEPT_STREAM_NO_BLOCK 14 #define SSL_ACCEPT_STREAM_UNI 15 #define SSL_ACCEPT_STREAM_BIDI 16 17 SSL *SSL_accept_stream(SSL *ssl, uint64_t flags); 18 19 size_t SSL_get_accept_stream_queue_len(SSL *ssl); 20 21=head1 DESCRIPTION 22 23The SSL_accept_stream() function attempts to dequeue an incoming stream from the 24given QUIC connection SSL object and returns the newly allocated QUIC stream SSL 25object. 26 27If the queue of incoming streams is empty, this function returns NULL (in 28nonblocking mode) or waits for an incoming stream (in blocking mode). This 29function may still return NULL in blocking mode, for example if the underlying 30connection is terminated. 31 32The caller is responsible for managing the lifetime of the returned QUIC stream 33SSL object; for more information, see L<SSL_free(3)>. 34 35This function will block if the QUIC connection SSL object is configured in 36blocking mode (see L<SSL_set_blocking_mode(3)>), but this may be bypassed by 37passing the flag B<SSL_ACCEPT_STREAM_NO_BLOCK> in I<flags>. If this flag is set, 38this function never blocks. 39 40By default, this function will return the first incoming stream, whether it is 41unidirectional or bidirectional. Passing the flag B<SSL_ACCEPT_STREAM_UNI> or 42B<SSL_ACCEPT_STREAM_BIDI> will return the first stream that is unidirectional or 43bidirectional, respectively. If these flags are both set, either type can be 44returned. A NULL return value may mean that there are still streams that can 45be dequeued. 46 47Calling SSL_accept_stream() if there is no default stream already present 48inhibits the future creation of a default stream. See L<openssl-quic(7)>. 49 50SSL_get_accept_stream_queue_len() returns the number of incoming streams 51currently waiting in the accept queue. 52 53These functions can be used from multiple threads for the same QUIC connection. 54 55Depending on whether default stream functionality is being used, it may be 56necessary to explicitly configure the incoming stream policy before streams can 57be accepted; see L<SSL_set_incoming_stream_policy(3)>. See also 58L<openssl-quic(7)/MODES OF OPERATION> for more information on default stream 59functionality. 60 61=head1 RETURN VALUES 62 63SSL_accept_stream() returns a newly allocated QUIC stream SSL object, or NULL if 64no new incoming streams are available, or if the connection has been terminated, 65or if called on an SSL object other than a QUIC connection SSL object. 66L<SSL_get_error(3)> can be used to obtain further information in this case. 67 68SSL_get_accept_stream_queue_len() returns the number of incoming streams 69currently waiting in the accept queue, or 0 if called on an SSL object other than 70a QUIC connection SSL object. 71 72=head1 SEE ALSO 73 74L<openssl-quic(7)/MODES OF OPERATION>, L<SSL_new_stream(3)>, 75L<SSL_set_blocking_mode(3)>, L<SSL_free(3)> 76 77=head1 HISTORY 78 79SSL_accept_stream() and SSL_get_accept_stream_queue_len() were added in OpenSSL 803.2. 81 82=head1 COPYRIGHT 83 84Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved. 85 86Licensed under the Apache License 2.0 (the "License"). You may not use 87this file except in compliance with the License. You can obtain a copy 88in the file LICENSE in the source distribution or at 89L<https://www.openssl.org/source/license.html>. 90 91=cut 92