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