-*- mode: troff; coding: utf-8 -*- Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45) Standard preamble: ========================================================================..
..
..
\*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.. ds C` ""
. ds C' ""
'br\}
. ds C`
. ds C'
'br\}
Escape single quotes in literal strings from groff's Unicode transform. If the F register is >0, we'll generate index entries on stderr for titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index entries marked with X<> in POD. Of course, you'll have to process the output yourself in some meaningful fashion. Avoid warning from groff about undefined register 'F'...
.nr rF 0
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
======================================================================== Title "SSL_POLL 3ossl" SSL_POLL 3ossl 2025-07-01 3.5.1 OpenSSL
For nroff, turn off justification. Always turn off hyphenation; it makes way too many mistakes in technical documents. NAME
SSL_poll,
SSL_POLL_EVENT_NONE,
SSL_POLL_EVENT_F,
SSL_POLL_EVENT_EC,
SSL_POLL_EVENT_ECD,
SSL_POLL_EVENT_ER,
SSL_POLL_EVENT_EW,
SSL_POLL_EVENT_R,
SSL_POLL_EVENT_W,
SSL_POLL_EVENT_ISB,
SSL_POLL_EVENT_ISU,
SSL_POLL_EVENT_OSB,
SSL_POLL_EVENT_OSU,
SSL_POLL_EVENT_RW,
SSL_POLL_EVENT_RE,
SSL_POLL_EVENT_WE,
SSL_POLL_EVENT_RWE,
SSL_POLL_EVENT_E,
SSL_POLL_EVENT_IS,
SSL_POLL_EVENT_ISE,
SSL_POLL_EVENT_I,
SSL_POLL_EVENT_OS,
SSL_POLL_EVENT_OSE,
SSL_POLL_FLAG_NO_HANDLE_EVENTS
\- determine or await readiness conditions for one or more pollable objects
SYNOPSIS
Header "SYNOPSIS" .Vb 1
#include <
openssl/
ssl.h>
\&
#define SSL_POLL_EVENT_NONE 0
\&
#define SSL_POLL_EVENT_F /* F (Failure) */
#define SSL_POLL_EVENT_EC /* EC (Exception on Conn) */
#define SSL_POLL_EVENT_ECD /* ECD (Exception on Conn Drained) */
#define SSL_POLL_EVENT_ER /* ER (Exception on Read) */
#define SSL_POLL_EVENT_EW /* EW (Exception on Write) */
#define SSL_POLL_EVENT_R /* R (Readable) */
#define SSL_POLL_EVENT_W /* W (Writable) */
#define SSL_POLL_EVENT_ISB /* ISB (Incoming Stream: Bidi) */
#define SSL_POLL_EVENT_ISU /* ISU (Incoming Stream: Uni) */
#define SSL_POLL_EVENT_OSB /* OSB (Outgoing Stream: Bidi) */
#define SSL_POLL_EVENT_OSU /* OSU (Outgoing Stream: Uni) */
\&
#define SSL_POLL_EVENT_RW /* R | W */
#define SSL_POLL_EVENT_RE /* R | ER */
#define SSL_POLL_EVENT_WE /* W | EW */
#define SSL_POLL_EVENT_RWE /* RE | WE */
#define SSL_POLL_EVENT_E /* EC | ER | EW */
#define SSL_POLL_EVENT_IS /* ISB | ISU */
#define SSL_POLL_EVENT_ISE /* IS | EC */
#define SSL_POLL_EVENT_I /* IS */
#define SSL_POLL_EVENT_OS /* OSB | OSU */
#define SSL_POLL_EVENT_OSE /* OS | EC */
\&
typedef struct ssl_poll_item_st {
BIO_POLL_DESCRIPTOR desc;
uint64_t events, revents;
} SSL_POLL_ITEM;
\&
#define SSL_POLL_FLAG_NO_HANDLE_EVENTS
\&
int SSL_poll(SSL_POLL_ITEM *items,
size_t num_items,
size_t stride,
const struct timeval *timeout,
uint64_t flags,
size_t *result_count);
.Ve
DESCRIPTION
Header "DESCRIPTION" \fBSSL_poll() allows the readiness conditions of the resources represented by one
or more BIO_POLL_DESCRIPTOR structures to be determined. In particular, it can
be used to query for readiness conditions on QUIC connection SSL objects and
QUIC stream SSL objects in a single call. It can also be used to block until at
least one of the given resources is ready.
A call to SSL_poll() specifies an array of SSL_POLL_ITEM structures, each of
which designates a resource which is being polled for readiness, and a set of
event flags which indicate the specific readiness events which the caller is
interested in in relation to the specified resource.
The fields of SSL_POLL_ITEM are as follows:
desc 4
Item "desc" The resource being polled for readiness, as represented by a
\fBBIO_POLL_DESCRIPTOR. Currently, this must be a poll descriptor of type
\fBBIO_POLL_DESCRIPTOR_TYPE_SSL, representing an SSL object pointer, and the SSL
object must be a QUIC connection SSL object or QUIC stream SSL object.
.Sp
If a
SSL_POLL_ITEM has a poll descriptor type of
\fBBIO_POLL_DESCRIPTOR_TYPE_NONE, or the SSL object pointer is NULL, the
\fBSSL_POLL_ITEM array entry is ignored and
revents will be set to 0 on
return.
events 4
Item "events" This is the set of zero or more events which the caller is interested in
learning about in relation to the resource described by
desc. It is a
collection of zero or more
SSL_POLL_EVENT flags. See "EVENT TYPES" for a
description of each of the event types.
revents 4
Item "revents" After
SSL_poll() returns, this is the set of zero or more events which are
actually applicable to the resource described by
desc. As for
events,
it is a collection of zero or more
SSL_POLL_EVENT flags.
.Sp
\fIrevents need not be a subset of the events specified in
events, as some
event types are defined as always being enabled (non-maskable). See "EVENT
TYPES" for more information.
To use SSL_poll(), call it with an array of SSL_POLL_ITEM structures. The
array need remain allocated only for the duration of the call. num_items must
be set to the number of entries in the array, and stride must be set to
\f(CWsizeof(SSL_POLL_ITEM).
The timeout argument specifies the timeout to use, and, implicitly, whether
to use SSL_poll() in blocking or nonblocking mode:
\(bu 4
If
timeout is NULL, the function blocks indefinitely until at least one
resource is ready.
\(bu 4
If
timeout is non-NULL, and it points to a
struct timeval which is set to
zero, the function operates in nonblocking mode and returns immediately with
readiness information.
\(bu 4
If
timeout is non-NULL, and it points to a
struct timeval which is set to
a value other than zero, the function blocks for the specified interval or until
at least one of the specified resources is ready, whichever comes first.
The present implementation of SSL_poll() is a subset of the functionality which
will eventually be available. For more information, see "LIMITATIONS".
The following flags are currently defined for the flags argument:
SSL_POLL_FLAG_NO_HANDLE_EVENTS 4
Item "SSL_POLL_FLAG_NO_HANDLE_EVENTS" This flag indicates that internal state machine processing should not be
performed in an attempt to generate new readiness events. Only existing
readiness events will be reported.
.Sp
If this flag is used in nonblocking mode (with a timeout of zero), no internal
state machine processing is performed.
.Sp
If this flag is used in blocking mode (for example, with
timeout set to
NULL), event processing does not occur unless the function blocks.
The result_count argument is optional. If it is non-NULL, it is used to
output the number of entries in the array which have nonzero revents fields
when the call to SSL_poll() returns; see "RETURN VALUES" for details.
"EVENT TYPES"
Header "EVENT TYPES" The
SSL_poll() interface reports zero or more event types on a given resource,
represented by a bit mask.
All of the event types are level triggered and represent a readiness or
permanent exception condition; as such, after an event has been reported by
\fBSSL_poll() for a resource, it will continue to be reported in future SSL_poll()
calls until the condition ceases to be in effect. A caller must mask the given
event type bit in future SSL_poll() calls if it does not wish to receive
repeated notifications and has not caused the underlying readiness condition
(for example, consuming all available data using SSL_read_ex\|(3) after
\fBSSL_POLL_EVENT_R is reported) to be deasserted.
Some event types do not make sense on a given kind of resource. In this case,
specifying that event type in events is a no-op and will be ignored, and the
given event will never be reported in revents.
Failure of the polling mechanism itself is considered distinct from an exception
condition on a resource which was successfully polled. See SSL_POLL_EVENT_F
and "RETURN VALUES" for details.
In general, an application should always listen for the event types
corresponding to exception conditions if it is listening to the corresponding
non-exception event types (e.g. SSL_POLL_EVENT_EC and SSL_POLL_EVENT_ER
for SSL_POLL_EVENT_R), as not doing so is unlikely to be a sound design.
Some event types are non-maskable and may be reported in revents regardless
of whether they were requested in events.
The following event types are supported:
SSL_POLL_EVENT_F 4
Item "SSL_POLL_EVENT_F" Polling failure. This event is raised when a resource could not be polled. It is
distinct from an exception condition reported on a resource which was
successfully polled and represents a failure of the polling process itself in
relation to a resource. This may mean that
SSL_poll() does not support the kind
of resource specified.
.Sp
Where this event is raised on at least one item in
items,
SSL_poll() will
return 0 and the ERR stack will contain information pertaining to the first item
in
items with
SSL_POLL_EVENT_F set. See "RETURN VALUES" for more
information.
.Sp
This event type may be raised even if it was not requested in
events;
specifying this event type in
events does nothing.
SSL_POLL_EVENT_EL 4
Item "SSL_POLL_EVENT_EL" Error at listener level. This event is raised when a listener has failed, for
example if a network BIO has encountered a permanent error.
.Sp
This event is never raised on objects which are not listeners, but its
occurrence will cause
SSL_POLL_EVENT_EC to be raised on all dependent
connections.
SSL_POLL_EVENT_EC 4
Item "SSL_POLL_EVENT_EC" Error at connection level. This event is raised when a connection has failed.
In particular, it is raised when a connection begins terminating.
.Sp
This event is never raised on objects which are not connections.
SSL_POLL_EVENT_ECD 4
Item "SSL_POLL_EVENT_ECD" Error at connection level (drained). This event is raised when a connection has
finished terminating, and has reached the terminated state. This event will
generally occur after an interval of time passes after the
SSL_POLL_EVENT_EC
event is raised on a connection.
.Sp
This event is never raised on objects which are not connections.
SSL_POLL_EVENT_ER 4
Item "SSL_POLL_EVENT_ER" Error in read direction. For QUIC, this is raised only in the event that a
stream has a read part and that read part has been reset by the peer (for
example, using a
RESET_STREAM frame).
SSL_POLL_EVENT_EW 4
Item "SSL_POLL_EVENT_EW" Error in write direction. For QUIC, this is raised only in the event that a
stream has a write part and that write part has been reset by the peer using a
\fBSTOP_SENDING frame.
SSL_POLL_EVENT_R 4
Item "SSL_POLL_EVENT_R" Readable. This event is raised when a QUIC stream SSL object (or a QUIC
connection SSL object with a default stream attached) has application data
waiting to be read using
SSL_read_ex\|(3), or a FIN event as represented by
\fBSSL_ERROR_ZERO_RETURN waiting to be read.
.Sp
It is not raised in the event of the receiving part of the QUIC stream being
reset by the peer; see
SSL_POLL_EVENT_ER.
SSL_POLL_EVENT_W 4
Item "SSL_POLL_EVENT_W" Writable. This event is raised when a QUIC stream SSL object (or a QUIC
connection SSL object with a default stream attached) could accept more
application data using
SSL_write_ex\|(3).
.Sp
This event is never raised by a receive-only stream.
.Sp
This event is never raised by a stream which has had its send part concluded
normally (as with
SSL_stream_conclude\|(3)) or locally reset (as with
\fBSSL_stream_reset\|(3)).
.Sp
This event does not guarantee that a subsequent call to
SSL_write_ex\|(3) will
succeed.
SSL_POLL_EVENT_IC 4
Item "SSL_POLL_EVENT_IC" This event, which is only raised by a QUIC listener SSL object, is raised when
one or more incoming QUIC connections are available to be accepted using
\fBSSL_accept_connection\|(3).
SSL_POLL_EVENT_ISB 4
Item "SSL_POLL_EVENT_ISB" This event, which is only raised by a QUIC connection SSL object, is raised when
one or more incoming bidirectional streams are available to be accepted using
\fBSSL_accept_stream\|(3).
SSL_POLL_EVENT_ISU 4
Item "SSL_POLL_EVENT_ISU" This event, which is only raised by a QUIC connection SSL object, is raised when
one or more incoming unidirectional streams are available to be accepted using
\fBSSL_accept_stream\|(3).
SSL_POLL_EVENT_OSB 4
Item "SSL_POLL_EVENT_OSB" This event, which is only raised by a QUIC connection SSL object, is raised when
QUIC stream creation flow control currently permits at least one additional
bidirectional stream to be locally created.
SSL_POLL_EVENT_OSU 4
Item "SSL_POLL_EVENT_OSU" This event, which is only raised by a QUIC connection SSL object, is raised when
QUIC stream creation flow control currently permits at least one additional
unidirectional stream to be locally created.
LIMITATIONS
Header "LIMITATIONS" \fBSSL_poll() as presently implemented has the following limitation:
\(bu 4
Only
BIO_POLL_DESCRIPTOR structures with type
\fBBIO_POLL_DESCRIPTOR_TYPE_SSL, referencing QUIC listener, connection or
stream SSL objects, are supported.
This limitation may be revised in a future release of OpenSSL.
"RETURN VALUES"
Header "RETURN VALUES" \fBSSL_poll() returns 1 on success and 0 on failure.
Unless the items pointer itself is invalid, SSL_poll() will always initialise
the revents fields of all items in the input array upon returning, even if it
returns failure.
If result_count is non-NULL, it is always written with the number of items in
the array with nonzero revents fields, even if the SSL_poll() call returns
failure.
It is possible for result_count to be written as 0 even if the SSL_poll()
call returns success, namely if no events were output but the polling process
was successful (e.g. in nonblocking usage) or timed out.
It is possible for result_count to be written as a nonzero value if the
\fBSSL_poll() call returns failure, for example due to SSL_POLL_EVENT_F events,
or because some events were detected and output before encountering a failure
condition while processing a subsequent entry in the items array.
If at least one SSL_POLL_EVENT_F event is output, SSL_poll() is guaranteed
to return 0 and guaranteed to place at least one ERR on the error stack
describing the first SSL_POLL_EVENT_F output. Detailed information on any
additional SSL_POLL_EVENT_F events is not available. SSL_poll() may or may
not return more than one SSL_POLL_EVENT_F event at once.
"Normal" events representing exceptional I/O conditions which do not
constitute a failure of the SSL_poll() mechanism itself are not considered
errors by SSL_poll() and are instead represented using their own event type; see
"EVENT TYPES" for details.
The caller can establish the meaning of the SSL_poll() return and output values
as follows:
\(bu 4
If
SSL_poll() returns 1 and
result_count is zero, the operation timed out
before any resource was ready.
\(bu 4
If
SSL_poll() returns 1 and
result_count is nonzero, that many events were
output.
\(bu 4
If
SSL_poll() returns 0 and
result_count is zero, the caller has made a basic
usage error; check the ERR stack for details.
\(bu 4
If
SSL_poll() returns 0 and
result_count is nonzero, inspect the
items
array for
SSL_POLL_ITEM structures with the
SSL_POLL_EVENT_F event type
raised in
revents. The entries added to the ERR stack (of which there is
guaranteed to be at least one) reflect the cause of the failure of the first
item in
items with
SSL_POLL_EVENT_F raised. Note that there may be events
other than
SSL_POLL_EVENT_F output for items which come before the first
item with
SSL_POLL_EVENT_F raised, and additional
SSL_POLL_EVENT_F
events may or may not have been output, both of which which will be reflected in
\fIresult_count.
"SEE ALSO"
Header "SEE ALSO" \fBBIO_get_rpoll_descriptor\|(3),
BIO_get_wpoll_descriptor\|(3),
\fBSSL_get_rpoll_descriptor\|(3),
SSL_get_wpoll_descriptor\|(3)
HISTORY
Header "HISTORY" \fBSSL_poll() was added in OpenSSL 3.3.
Before 3.5, SSL_poll() did not support blocking operation and
would fail if called with a NULL timeout parameter or a timeout parameter
pointing to a struct timeval which was not zero.
Before 3.5, the SSL_POLL_EVENT_EL and SSL_POLL_EVENT_IC
event types were not present.
COPYRIGHT
Header "COPYRIGHT" Copyright 2024-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
<https://www.openssl.org/source/license.html>.