![]() |
TSDuck v3.45-4766
MPEG Transport Stream Toolkit
|
SSL/TLS connected socket, for data communication. More...
#include <tsTLSConnection.h>


Public Types | |
| using | SuperClass = TCPSocket |
| Reference to the superclass. | |
Public Member Functions | |
| TLSConnection (Report *report) | |
| Constructor. | |
| TLSConnection (Report *report, const TLSArgs &args) | |
| Constructor with initial client arguments. | |
| TLSConnection (ReporterBase *delegate) | |
| Constructor. | |
| TLSConnection (ReporterBase *delegate, const TLSArgs &args) | |
| Constructor with initial client arguments. | |
| const UStringList & | additionalServerNames () const |
| For a client connection, get all addition host names for the server's certificate verification during connect(). | |
| void | addSubscription (SubscriptionHandlerInterface *handler) |
| Add a subscriber to open/close events. | |
| void | addVerifyServer (const UString &name) |
| For a client connection, add another accepted host name for the server's certificate verification during connect(). | |
| virtual bool | asyncCompletedStream (IOSB *iosb) override |
| Update the status of an asynchronous readStream() or writeStream() after it completed. | |
| bool | bind (const IPSocketAddress &addr) |
| Bind to a local address and port. | |
| void | cancelSubscription (SubscriptionHandlerInterface *handler) |
| Remove a subscriber to open/close events. | |
| virtual bool | close (bool silent=false) final |
| Close the socket. | |
| virtual bool | closeWriter (bool silent=false) override |
| Close the write direction of the connection. | |
| virtual bool | connect (const IPSocketAddress &, IOSB *=nullptr) override |
| Connect to a remote address and port. | |
| virtual bool | disconnect (bool silent=false) override |
| Disconnect from remote partner. | |
| virtual bool | endOfStream () override |
| Check if the end of stream was reached while reading. | |
| IP | generation () const |
| Get the IP generation with which the socket was open. | |
| SysHandleType | getHandle () const |
| Get the underlying file descriptor or device handle. | |
| bool | getLocalAddress (IPSocketAddress &addr) const |
| Get local socket address. | |
| bool | getPeer (IPSocketAddress &addr) |
| Get the connected remote peer. | |
| virtual SysHandleType | getReadHandle () const override |
| Get the underlying file descriptor or device handle for read operations. | |
| SysSocketType | getReadSocket () const |
| Get the underlying file descriptor or device handle as a system socket handle for read operations. | |
| SysSocketType | getSocket () const |
| Get the underlying file descriptor or device handle as a system socket handle. | |
| virtual SysHandleType | getWriteHandle () const override |
| Get the underlying file descriptor or device handle for write operations. | |
| SysSocketType | getWriteSocket () const |
| Get the underlying file descriptor or device handle as a system socket handle for write operations. | |
| bool | isConnected () const |
| Check if the socket is connected. | |
| bool | isNonBlocking () const |
| Check if the device is in non-blocking mode. | |
| bool | isOpen () const |
| Check if socket is open. | |
| virtual bool | isReadStream () override |
| Check if the stream is open for read. | |
| bool | isServerSide () const |
| Check if the socket is the server-side end of a connection. | |
| bool | isSupportedByReactor (bool recheck=false) |
| Check if the device is supported by a reactor for non-blocking or asynchronous I/O. | |
| virtual bool | isWriteStream () override |
| Check if the stream is open for write. | |
| UString | localName () |
| Get the local address as a string. | |
| bool | muteReport (bool mute) |
| Temporarily mute the associated report. | |
| virtual bool | open (IP gen=IP::Any) final |
| Open the socket. | |
| UString | peerName () |
| Get the connected remote peer as a string. | |
| virtual bool | readStream (void *addr, size_t max_size, size_t &ret_size, const AbortInterface *abort=nullptr, IOSB *iosb=nullptr) override |
| Read some data from the stream. | |
| virtual bool | readStream (void *addr, size_t size, const AbortInterface *abort=nullptr) override |
| Read complete data from the stream. | |
| virtual Report & | report () const override |
| Access the Report which is associated with this object. | |
| bool | reusePort (bool reuse_port) |
| Set the "reuse port" option. | |
| const UString & | serverName () const |
| For a client connection, get the server name to be used in SNI (Server Name Indication). | |
| void | setArgs (const TLSArgs &args) |
| Set command line arguments for the client. | |
| bool | setConnectStatus (IOSB *iosb, int error_code) |
| Update the status of an asynchronous connect(). | |
| bool | setKeepAlive (bool active) |
| Set the "keep alive" option. | |
| bool | setLingerTime (int seconds) |
| Set the linger time option. | |
| bool | setNoDelay (bool active) |
| Set the "no delay" option. | |
| bool | setNoLinger () |
| Remove the linger time option. | |
| bool | setNonBlocking (bool non_blocking) |
| Set the device in non-blocking mode. | |
| bool | setReceiveBufferSize (size_t size) |
| Set the receive buffer size. | |
| bool | setReceiveTimeout (cn::milliseconds timeout) |
| Set the receive timeout. | |
| Report * | setReport (Report *report) |
| Associate this object with another Report to log errors. | |
| ReporterBase * | setReport (ReporterBase *delegate) |
| Associate this object with another ReporterBase to log errors. | |
| bool | setSendBufferSize (size_t size) |
| Set the send buffer size. | |
| void | setServerName (const UString &server_name) |
| For a client connection, specify the server name to be used in SNI (Server Name Indication). | |
| bool | setTTL (int ttl) |
| Set the Time To Live (TTL) option. | |
| void | setVerifyPeer (bool on) |
| Define if the peer's certificate shall be verified. | |
| bool | verifyPeer () const |
| Check if the peer's certificate shall be verified. | |
| virtual bool | writeStream (const void *addr, size_t size, IOSB *iosb=nullptr) override |
| Write data to the stream. | |
| virtual bool | writeStream (const void *addr, size_t size, size_t &written_size, IOSB *iosb=nullptr) override |
| Write some data to the stream. | |
Static Public Member Functions | |
| static bool | IsPendingStatus (int error_code) |
| This static method checks if a system error code means "I/O in progress" (asynchronous I/O) or "I/O would block" (non-blocking I/O). | |
| static int | SilentLevel (bool silent, int default_severity=Severity::Error) |
| Compute a log severity level from a "silent" parameter. | |
Protected Member Functions | |
| virtual bool | allowSetNonBlocking () const override |
| Check that the non-blocking mode can be set. | |
| template<typename HANDLER , typename F > requires std::derived_from<HANDLER, SubscriptionHandlerInterface> | |
| void | callSubscribers (F &&func) |
| Call a handler on all subscribers, using a lambda expression. | |
| bool | checkNonBlocking (bool non_blocking, const UChar *opname) |
| Check the blocking mode of a device. | |
| bool | checkNonBlocking (IOSB *iosb, const UChar *opname) |
| Check the blocking mode of a device. | |
| bool | convert (IPAddress &addr) const |
| Convert an IP address to make it compatible with the socket IP generation. | |
| bool | createSocket (IP gen, int type, int protocol) |
| Create the socket. | |
| int | genericSystemRead (void *addr, size_t max_size, size_t &ret_size, const AbortInterface *abort, NonBlockingDevice::IOSB *iosb, uint64_t position) |
| Generic system read operation. | |
| int | genericSystemWrite (const void *addr, size_t size, size_t &written_size, NonBlockingDevice::IOSB *iosb, uint64_t position) |
| Generic system write operation. | |
| virtual bool | openImplementation (IP gen) override |
| Open the socket, actual implementation which must be overriden by subclasses. | |
| bool | setSystemNonBlocking (bool non_blocking) |
| Low-level method to set the system file or socket descriptor in non-blocking mode. | |
Static Protected Member Functions | |
| template<class T > requires std::derived_from<T, StreamInterface> | |
| static bool | ReadStreamHelper (T *obj, void *addr, size_t size, const AbortInterface *abort) |
| Implementation helper for fixed-size version of readStream(). | |
| template<class T > requires std::derived_from<T, StreamInterface> | |
| static bool | WriteStreamHelper (T *obj, const void *addr, size_t size, NonBlockingDevice::IOSB *iosb) |
| Implementation helper for fixed-size version of writeStream(). | |
Protected Attributes | |
| std::recursive_mutex | _mutex {} |
| Mutex protecting this object. | |
SSL/TLS connected socket, for data communication.
This class is used in two contexts:
Possible public servers to test various invalid certificates:
|
explicit |
Constructor.
| [in] | report | Where to report errors. The report object must remain valid as long as this object exists or setReport() is used with another Report object. If report is null, log messages are discarded. |
|
explicit |
Constructor.
| [in] | delegate | Use the report of another ReporterBase. If delegate is null, log messages are discarded. |
Constructor with initial client arguments.
| [in] | report | Where to report errors. The report object must remain valid as long as this object exists or setReport() is used with another Report object. If report is null, log messages are discarded. |
| [in] | args | Initial TLS client arguments. |
|
inline |
Constructor with initial client arguments.
| [in] | delegate | Use the report of another ReporterBase. If delegate is null, log messages are discarded. |
| [in] | args | Initial TLS client arguments. |
|
overridevirtual |
Connect to a remote address and port.
Use this method when acting as TCP client. Do not use on server side: the TCPConnection object is passed to TCPServer::accept() which establishes the connection.
| [in] | addr | IP address and port of the server to connect to. |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the socket must be in non-blocking mode. When null, the socket must be in blocking mode (the default). See the description of IOSB. Important: The parameter iosb should not be used by applications. It should be used only by "reactive classes", which work in combination with a Reactor. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Close the write direction of the connection.
The application shall call this routine after sending the last message but may still want to receive messages, waiting for the peer to voluntary disconnect.
| [in] | silent | If true, do not report errors through the logger. This is typically useful when the socket is in some error condition and closing it is necessary although it may generate additional meaningless errors. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Disconnect from remote partner.
| [in] | silent | If true, do not report errors through the logger. This is typically useful when the socket is in some error condition and closing it is necessary although it may generate additional meaningless errors. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Read complete data from the stream.
Read exactly size bytes, waiting if necessary.
Synchronization: There is no iosb parameter because this method uses blocking I/O by design. An error is returned if the instance of the class which implements StreamInterface is in non-blocking mode.
| [out] | addr | Address of the buffer for the incoming data. |
| [in] | size | Size in bytes of the buffer. |
| [in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Read some data from the stream.
Wait and read at least one byte. Don't try to read exactly max_size bytes. If ret_size is less than max_bytes, it is possible to read more.
| [out] | addr | Address of the buffer for the incoming data. |
| [in] | max_size | Maximum size in bytes of the buffer. |
| [out] | ret_size | Returned input size in bytes. If zero, end of file has been reached or an error occurred. |
| [in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. Important: The parameter iosb should not be used by applications. It should be used only by "reactive classes", which work in combination with a Reactor. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Write data to the stream.
All bytes are written to the stream, blocking or retrying when necessary when the stream is in blocking mode. The base implementation of writeStream() uses the virtual version with a written_size output parameter.
| [in] | addr | Address of the data to write. |
| [in] | size | Size in bytes of the data to write. |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. Important: The parameter iosb should not be used by applications. It should be used only by "reactive classes", which work in combination with a Reactor. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Write some data to the stream.
All bytes are written to the stream, blocking or retrying when necessary when the stream is in blocking mode. Return the number of actually written bytes if some error occurred before writing everything.
| [in] | addr | Address of the data to write. |
| [in] | size | Size in bytes of the data to write. |
| [out] | written_size | Actually written size in bytes. Can be less than size in case of error in the middle of the write. |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. Important: The parameter iosb should not be used by applications. It should be used only by "reactive classes", which work in combination with a Reactor. |
Reimplemented from ts::TCPConnection.
|
inherited |
Update the status of an asynchronous connect().
| [in,out] | iosb | Address of the IOSB structure which was used when connect() was called. |
| [in] | error_code | Error code in the context of the connection. |
|
inlineinherited |
Check if the socket is connected.
|
inlineinherited |
Check if the socket is the server-side end of a connection.
|
inherited |
Get the connected remote peer.
| [out] | addr | IP address and port of the remote socket. |
|
inherited |
Get the connected remote peer as a string.
|
overridevirtualinherited |
Update the status of an asynchronous readStream() or writeStream() after it completed.
This method applies to asynchronous I/O only (Windows), not non-blocking I/O (UNIX).
| [in,out] | iosb | Address of the IOSB structure which was used when readStream() or writeStream() was called. |
Implements ts::StreamInterface.
|
overridevirtualinherited |
Check if the stream is open for read.
Implements ts::StreamInterface.
|
overridevirtualinherited |
Check if the stream is open for write.
Implements ts::StreamInterface.
|
overridevirtualinherited |
Check if the end of stream was reached while reading.
Implements ts::StreamInterface.
|
inherited |
Set the Time To Live (TTL) option.
| [in] | ttl | The TTL value, ie. the maximum number of "hops" between routers before an IP packet is dropped. |
|
inherited |
Remove the linger time option.
|
inherited |
Set the linger time option.
| [in] | seconds | Number of seconds to wait after shuting down the socket. |
|
inherited |
Set the "keep alive" option.
| [in] | active | If true, the socket periodically sends "keep alive" packets when the connection is idle. |
|
inherited |
Set the "no delay" option.
| [in] | active | If true, the socket immediately sends outgoing packets. By default, a TCP socket waits a small amount of time after a send() operation to get a chance to group outgoing data from successive send() operations into one single packet. |
|
overrideprotectedvirtualinherited |
Open the socket, actual implementation which must be overriden by subclasses.
Never called when the application tries to open a socket which is already open.
| [in] | gen | IP generation, IPv4 or IPv6. If set to IP::Any, open an IPv6 socket (IPv4 connections allowed). |
Implements ts::Socket.
Open the socket.
Subclasses are not permitted to override this one, they should implement openImplementation().
| [in] | gen | IP generation, IPv4 or IPv6. If set to IP::Any, open an IPv6 socket (IPv4 connections allowed). |
|
finalvirtualinherited |
Close the socket.
Subclasses are not permitted to override this one, they should implement closeImplementation().
| [in] | silent | If true, do not report errors through the logger. This is typically useful when the socket is in some error condition and closing it is necessary although it may generate additional meaningless errors. |
|
inlineinherited |
Check if socket is open.
|
inlineinherited |
Get the IP generation with which the socket was open.
|
inherited |
Set the send buffer size.
| [in] | size | Send buffer size in bytes. |
|
inherited |
Set the receive buffer size.
| [in] | size | Receive buffer size in bytes. |
|
inherited |
Set the receive timeout.
| [in] | timeout | Receive timeout in milliseconds. If negative or zero, receive timeout is not used, reception waits forever. |
|
inherited |
Set the "reuse port" option.
| [in] | reuse_port | If true, the socket is allowed to reuse a local UDP port which is already bound. |
|
inherited |
Bind to a local address and port.
The IP address part of the socket address must one of:
Special note for receiving multicast on most Unix systems (at least Linux and macOS): The IP address shall be either AnyAddress4 or the multicast group address. Do not specify a local address to receive multicast on Unix.
The port number part of the socket address must be one of:
| [in] | addr | Local socket address to bind to. |
|
inherited |
Get local socket address.
| [out] | addr | Local socket address of the connection. |
|
inherited |
Get the local address as a string.
|
overridevirtualinherited |
Get the underlying file descriptor or device handle for read operations.
Subclasses should override this method.
Reimplemented from ts::NonBlockingDevice.
|
overridevirtualinherited |
Get the underlying file descriptor or device handle for write operations.
Subclasses should override this method.
Reimplemented from ts::NonBlockingDevice.
|
protectedinherited |
|
protectedinherited |
Convert an IP address to make it compatible with the socket IP generation.
| addr | [in,out] The address to convert. |
|
overrideprotectedvirtualinherited |
Check that the non-blocking mode can be set.
Must be implemented by subclasses which do not support setting the non-blocking in certain states, such as after being opened. The default implementation always allows setting the non-blocking mode.
Reimplemented from ts::NonBlockingDevice.
|
inherited |
Set the device in non-blocking mode.
Important: Usually, this method must be called before opening the device, whatever it means. Otherwise it is ignored and the device blocking mode is unchanged.
| [in] | non_blocking | It true, the device is set in non-blocking mode. |
|
inlineinherited |
Check if the device is in non-blocking mode.
|
inherited |
Check if the device is supported by a reactor for non-blocking or asynchronous I/O.
| [in] | recheck | If true, force a recheck. If false and the device was previously checked, return the previous cached value. |
|
inlinestaticinherited |
This static method checks if a system error code means "I/O in progress" (asynchronous I/O) or "I/O would block" (non-blocking I/O).
| [in] | error_code | System error code. |
|
inherited |
Get the underlying file descriptor or device handle.
This method is reserved for low-level operations and should not be used by normal applications.
On UNIX systems, sockets are standard file descriptors. On Windows systems, sockets and devices handles are two distinct types (SOCKET, an integer type, and HANDLE, a pointer type). However, SOCKET and HANDLE have the same size and can be converted between each other. In practice, all Windows device handles are pointers. When Microsoft decided to implement the BSD socket API, they needed to represent sockets as integers. The integer is simply a cast of the HANDLE pointer.
In practice, the methods getHandle() and getSocket() return the same value, represented as two different portable types, SysHandleType and SysSocketType. Note that this types are defined as their real representation. On UNIX systems, both are defined as int and are compatible. However, on Windows systems, they are defined as HANDLE and SOCKET and are not compatible. So, accidentally mixing the two compiles on UNIX but not on Windows. Be careful to use the right type for the right usage.
There is one important difference between getHandle() and getSocket(): the error values, SYS_HANDLE_INVALID and SYS_SOCKET_INVALID. Be careful, these constants have distinct binary values on Windows. This is the only case were it is not possible to cast between a SysHandleType value and a SysSocketType value. This is why it is recommended to always use getHandle() when a SysHandleType is required and getSocket() when a SysSocketType is required.
A subclass which uses file descriptors or device handles for read, write, or both, must override the methods getReadHandle(), getWriteHandle(), or both. If the two types of operations use the same file descriptor, the two methods must return the same value.
An application should call getReadHandle() for read operations and getWriteHandle() for write operations. The method getHandle() returns getReadHandle() if its returns a valid value, and getWriteHandle() otherwise.
|
inherited |
Get the underlying file descriptor or device handle as a system socket handle.
|
inherited |
Get the underlying file descriptor or device handle as a system socket handle for read operations.
|
inherited |
Get the underlying file descriptor or device handle as a system socket handle for write operations.
|
protectedinherited |
Check the blocking mode of a device.
Called by subclass methods which are explicitly called in blocking or non-blocking mode.
| [in] | non_blocking | The required non-blocking mode. |
| [in] | opname | Name of the operation, for the error message. |
|
protectedinherited |
Check the blocking mode of a device.
Called by subclass methods which are explicitly called in blocking or non-blocking mode.
| [in,out] | iosb | Address of an IOSB structure. If non-null, we are in non-blocking mode. When null, we are in blocking mode. When non-null, pending is reset to false and overlap is zeroed. |
| [in] | opname | Name of the operation, for the error message. |
|
protectedinherited |
Low-level method to set the system file or socket descriptor in non-blocking mode.
| [in] | non_blocking | It true, the device is set in non-blocking mode. |
Summary: Do not use this method unless you exactly know what you are doing.
UNIX: Depending on the way a file descriptor is created, it may be possible to specify the non-blocking mode from the beginning. Or it can be somehow inherited. However, this is not portable.
Examples:
In all cases, it is possible to set a file descriptor in non-blocking mode at any time using the method setSystemNonBlocking(). This method uses fcntl(F_SETFL) to alter the file descriptor's flags.
Windows: The natural way of not being blocked on I/O on Windows is asynchronous I/O. To increase the general confusion, there is some form of non-blocking mode on Windows sockets, and only sockets, not other forms of file handles. This mode is activated using "ioctlsocket(fd, FIONBIO, &mode)". When this mode is active, socket I/O become similar to UNIX: they immediately either succeed or fail, but never block. However, there is no way to get notified when the I/O becomes possible. There is no equivalent to epoll (Linux) or kqueue (macOS and BSD). The Windows I/O Completion Ports can only work on asynchronous I/O, using OVERLAPPED structures. Because this form of non-blocking mode is mostly useless in practice, we do not use it and the method setSystemNonBlocking() does nothing on Windows.
|
protectedinherited |
Generic system write operation.
This is a convenience method which can be used (or not) by subclasses when the system calls write() (UNIX) or WriteFile() (Windows) are appropriate.
| [in] | addr | Address of the data to write. |
| [in] | size | Size in bytes of the data to write. |
| [out] | written_size | Actually written size in bytes. Can be less than size in case of error in the middle of the write. |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. |
| [in] | position | This value is only used on Windows with asynchronous I/O on disk file. On Windows, when asynchronous I/O are used on random access files, the file position is not maintained. Each read or write operation is performed at the specified absolute position. |
|
protectedinherited |
Generic system read operation.
This is a convenience method which can be used (or not) by subclasses when the system calls read() (UNIX) or ReadFile() (Windows) are appropriate.
| [out] | addr | Address of the buffer for the incoming data. |
| [in] | max_size | Maximum size in bytes of the buffer. |
| [out] | ret_size | Returned input size in bytes. If zero, end of file has been reached or an error occurred. |
| [in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. |
| [in] | position | This value is only used on Windows with asynchronous I/O on disk file. On Windows, when asynchronous I/O are used on random access files, the file position is not maintained. Each read or write operation is performed at the specified absolute position. |
|
overridevirtualinherited |
Access the Report which is associated with this object.
Can be called from another thread only if the Report object is thread-safe.
Implements ts::ReporterInterface.
Associate this object with another Report to log errors.
| [in] | report | Where to report errors. The report object must remain valid as long as this object exists or setReport() is used with another Report object. If report is null, log messages are discarded. |
|
inherited |
Associate this object with another ReporterBase to log errors.
| [in] | delegate | Use the report of another ReporterBase. If delegate is null, the previous explicit Report is used.. |
|
inherited |
Temporarily mute the associated report.
| [in] | mute | It true, report() will return a null report (log messages are discarded), until muteReport() is invoked again with mute set to false. |
|
inlinestaticinherited |
Compute a log severity level from a "silent" parameter.
Some subclass methods have a "silent" parameter to avoid reporting errors which may be insignificant, typically when closing a device after an error, in which case the close operation may produce other errors if the previous error left the device in an inconsistent state. While those errors should not be displayed as errors, we still display them at debug level.
| [in] | silent | If true, do not report errors, report debug messages instead. |
| [in] | default_severity | Default severity, in non-silent mode (error by default). |
|
inherited |
|
inherited |
|
inlineprotectedinherited |
Call a handler on all subscribers, using a lambda expression.
| [in] | func | Function to call as lambda expression. |
|
inlinestaticprotectedinherited |
Implementation helper for fixed-size version of writeStream().
Often, the fixed-size version can be implemented using the variable-size version. However, this works well at a given derivation stage only.
Assume that:
| T | A subclass of StreamInterface. Write data to the stream. All bytes are written to the stream, blocking or retrying when necessary when the stream is in blocking mode. The base implementation of writeStream() uses the virtual version with a written_size output parameter. |
| [in,out] | obj | Object of class T. |
| [in] | addr | Address of the data to write. |
| [in] | size | Size in bytes of the data to write. |
| [in,out] | iosb | Address of an IOSB structure. If non-null, the stream must be in non-blocking mode. When null, the stream must be in blocking mode (the default). See the description of ts::NonBlockingDevice::IOSB. Important: The parameter iosb should not be used by applications. It should be used only by "reactive classes", which work in combination with a Reactor. |
|
inlinestaticprotectedinherited |
Implementation helper for fixed-size version of readStream().
See writeStreamHelper() for a rationale.
| T | A subclass of StreamInterface. |
| [in,out] | obj | Object of class T. |
| [out] | addr | Address of the buffer for the incoming data. |
| [in] | size | Size in bytes of the buffer. |
| [in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
|
inherited |
Set command line arguments for the client.
| [in] | args | TLS arguments. |
|
inlineinherited |
Define if the peer's certificate shall be verified.
| [in] | on | If true, the peer's certificate will be verified. |
|
inlineinherited |
Check if the peer's certificate shall be verified.
|
inherited |
For a client connection, specify the server name to be used in SNI (Server Name Indication).
| [in] | server_name | Main server name, as specified in SNI (Server Name Indication). Also used to verify the server's certificate when setVerifyPeer() is true. |
|
inlineinherited |
For a client connection, get the server name to be used in SNI (Server Name Indication).
|
inherited |
For a client connection, add another accepted host name for the server's certificate verification during connect().
The list is reset by setServerName().
| [in] | name | Additional accepted host name used to verify the server's certificate. |
|
inlineinherited |
For a client connection, get all addition host names for the server's certificate verification during connect().