WPILibC++ 2024.3.2
|
TCP handle. More...
#include <wpinet/uv/Tcp.h>
Public Types | |
using | Time = std::chrono::duration< uint64_t, std::milli > |
Public Types inherited from wpi::uv::Handle | |
using | Type = uv_handle_type |
Public Member Functions | |
Tcp (const private_init &) | |
~Tcp () noexcept override=default | |
void | Reuse (std::function< void()> callback, unsigned int flags=AF_UNSPEC) |
Reuse this handle. More... | |
std::shared_ptr< Tcp > | Accept () |
Accept incoming connection. More... | |
bool | Accept (const std::shared_ptr< Tcp > &client) |
Accept incoming connection. More... | |
void | Open (uv_os_sock_t sock) |
Open an existing file descriptor or SOCKET as a TCP handle. More... | |
bool | SetNoDelay (bool enable) |
Enable no delay operation (turns off Nagle's algorithm). More... | |
bool | SetKeepAlive (bool enable, Time time=Time{0}) |
Enable/Disable TCP keep-alive. More... | |
bool | SetSimultaneousAccepts (bool enable) |
Enable/Disable simultaneous asynchronous accept requests. More... | |
void | Bind (const sockaddr &addr, unsigned int flags=0) |
Bind the handle to an IPv4 or IPv6 address and port. More... | |
void | Bind (const sockaddr_in &addr, unsigned int flags=0) |
void | Bind (const sockaddr_in6 &addr, unsigned int flags=0) |
void | Bind (std::string_view ip, unsigned int port, unsigned int flags=0) |
Bind the handle to an IPv4 address and port. More... | |
void | Bind6 (std::string_view ip, unsigned int port, unsigned int flags=0) |
Bind the handle to an IPv6 address and port. More... | |
sockaddr_storage | GetSock () |
Get the current address to which the handle is bound. More... | |
sockaddr_storage | GetPeer () |
Get the address of the peer connected to the handle. More... | |
void | Connect (const sockaddr &addr, const std::shared_ptr< TcpConnectReq > &req) |
Establish an IPv4 or IPv6 TCP connection. More... | |
void | Connect (const sockaddr_in &addr, const std::shared_ptr< TcpConnectReq > &req) |
void | Connect (const sockaddr_in6 &addr, const std::shared_ptr< TcpConnectReq > &req) |
void | Connect (const sockaddr &addr, std::function< void()> callback) |
Establish an IPv4 or IPv6 TCP connection. More... | |
void | Connect (const sockaddr_in &addr, std::function< void()> callback) |
void | Connect (const sockaddr_in6 &addr, std::function< void()> callback) |
void | Connect (std::string_view ip, unsigned int port, const std::shared_ptr< TcpConnectReq > &req) |
Establish an IPv4 TCP connection. More... | |
void | Connect (std::string_view ip, unsigned int port, std::function< void()> callback) |
Establish an IPv4 TCP connection. More... | |
void | Connect6 (std::string_view ip, unsigned int port, const std::shared_ptr< TcpConnectReq > &req) |
Establish an IPv6 TCP connection. More... | |
void | Connect6 (std::string_view ip, unsigned int port, std::function< void()> callback) |
Establish an IPv6 TCP connection. More... | |
void | CloseReset () |
Resets a TCP connection by sending a RST packet. More... | |
Public Member Functions inherited from wpi::uv::NetworkStreamImpl< Tcp, uv_tcp_t > | |
std::shared_ptr< Tcp > | shared_from_this () |
std::shared_ptr< const Tcp > | shared_from_this () const |
uv_tcp_t * | GetRaw () const noexcept |
Get the underlying handle data structure. More... | |
Public Member Functions inherited from wpi::uv::NetworkStream | |
std::shared_ptr< NetworkStream > | shared_from_this () |
std::shared_ptr< const NetworkStream > | shared_from_this () const |
void | Listen (int backlog=kDefaultBacklog) |
Start listening for incoming connections. More... | |
void | Listen (std::function< void()> callback, int backlog=kDefaultBacklog) |
Start listening for incoming connections. More... | |
std::shared_ptr< NetworkStream > | Accept () |
Accept incoming connection. More... | |
bool | Accept (const std::shared_ptr< NetworkStream > &client) |
Accept incoming connection. More... | |
Public Member Functions inherited from wpi::uv::Stream | |
std::shared_ptr< Stream > | shared_from_this () |
std::shared_ptr< const Stream > | shared_from_this () const |
void | Shutdown (const std::shared_ptr< ShutdownReq > &req) |
Shutdown the outgoing (write) side of a duplex stream. More... | |
void | Shutdown (std::function< void()> callback=nullptr) |
Shutdown the outgoing (write) side of a duplex stream. More... | |
void | StartRead () |
Start reading data from an incoming stream. More... | |
void | StopRead () |
Stop reading data from the stream. More... | |
void | Write (std::span< const Buffer > bufs, const std::shared_ptr< WriteReq > &req) |
Write data to the stream. More... | |
void | Write (std::initializer_list< Buffer > bufs, const std::shared_ptr< WriteReq > &req) |
Write data to the stream. More... | |
void | Write (std::span< const Buffer > bufs, std::function< void(std::span< Buffer >, Error)> callback) |
Write data to the stream. More... | |
void | Write (std::initializer_list< Buffer > bufs, std::function< void(std::span< Buffer >, Error)> callback) |
Write data to the stream. More... | |
int | TryWrite (std::span< const Buffer > bufs) |
Queue a write request if it can be completed immediately. More... | |
int | TryWrite (std::initializer_list< Buffer > bufs) |
Queue a write request if it can be completed immediately. More... | |
int | TryWrite2 (std::span< const Buffer > bufs, Stream &send) |
Same as TryWrite() and extended write function for sending handles over a pipe. More... | |
int | TryWrite2 (std::initializer_list< Buffer > bufs, Stream &send) |
Same as TryWrite() and extended write function for sending handles over a pipe. More... | |
bool | IsReadable () const noexcept |
Check if the stream is readable. More... | |
bool | IsWritable () const noexcept |
Checks if the stream is writable. More... | |
bool | SetBlocking (bool enable) noexcept |
Enable or disable blocking mode for a stream. More... | |
size_t | GetWriteQueueSize () const noexcept |
Gets the amount of queued bytes waiting to be sent. More... | |
uv_stream_t * | GetRawStream () const noexcept |
Get the underlying stream data structure. More... | |
Public Member Functions inherited from wpi::uv::Handle | |
Handle (const Handle &)=delete | |
Handle (Handle &&)=delete | |
Handle & | operator= (const Handle &)=delete |
Handle & | operator= (Handle &&)=delete |
virtual | ~Handle () noexcept |
Type | GetType () const noexcept |
Get the type of the handle. More... | |
std::string_view | GetTypeName () const noexcept |
Get the name of the type of the handle. More... | |
std::shared_ptr< Loop > | GetLoop () const noexcept |
Get the loop where this handle runs. More... | |
Loop & | GetLoopRef () const noexcept |
Get the loop where this handle runs. More... | |
bool | IsActive () const noexcept |
Check if the handle is active. More... | |
bool | IsClosing () const noexcept |
Check if a handle is closing or closed. More... | |
void | Close () noexcept |
Request handle to be closed. More... | |
void | SetLoopClosing (bool loopClosing) noexcept |
Set if the loop is closing. More... | |
bool | IsLoopClosing () const noexcept |
Get the loop closing status. More... | |
void | Reference () noexcept |
Reference the given handle. More... | |
void | Unreference () noexcept |
Unreference the given handle. More... | |
bool | HasReference () const noexcept |
Check if the given handle is referenced. More... | |
size_t | RawSize () const noexcept |
Return the size of the underlying handle type. More... | |
uv_handle_t * | GetRawHandle () const noexcept |
Get the underlying handle data structure. More... | |
void | SetBufferAllocator (std::function< Buffer(size_t)> alloc, std::function< void(Buffer &)> dealloc) |
Set the functions used for allocating and releasing buffers. More... | |
void | FreeBuf (Buffer &buf) const noexcept |
Free a buffer. More... | |
template<typename T = void> | |
std::shared_ptr< T > | GetData () const |
Gets user-defined data. More... | |
void | SetData (std::shared_ptr< void > data) |
Sets user-defined data. More... | |
void | SetLogger (Logger *logger) |
Sets logger. More... | |
Logger * | GetLogger () const |
Gets logger. More... | |
void | ReportError (int err) const |
Report an error. More... | |
Static Public Member Functions | |
static std::shared_ptr< Tcp > | Create (Loop &loop, unsigned int flags=AF_UNSPEC) |
Create a TCP handle. More... | |
static std::shared_ptr< Tcp > | Create (const std::shared_ptr< Loop > &loop, unsigned int flags=AF_UNSPEC) |
Create a TCP handle. More... | |
Additional Inherited Members | |
Public Attributes inherited from wpi::uv::NetworkStream | |
sig::Signal | connection |
Signal generated when an incoming connection is received. More... | |
Public Attributes inherited from wpi::uv::Stream | |
sig::Signal< Buffer &, size_t > | data |
Signal generated when data was read on a stream. More... | |
sig::Signal | end |
Signal generated when no more read data is available. More... | |
Public Attributes inherited from wpi::uv::Handle | |
sig::Signal< Error > | error |
Error signal. More... | |
sig::Signal | closed |
Closed signal. More... | |
Static Public Attributes inherited from wpi::uv::NetworkStream | |
static constexpr int | kDefaultBacklog = 128 |
Protected Member Functions inherited from wpi::uv::NetworkStreamImpl< Tcp, uv_tcp_t > | |
NetworkStreamImpl () | |
Protected Member Functions inherited from wpi::uv::NetworkStream | |
NetworkStream (uv_stream_t *uv_stream) | |
virtual NetworkStream * | DoAccept ()=0 |
Protected Member Functions inherited from wpi::uv::Stream | |
Stream (uv_stream_t *uv_stream) | |
Protected Member Functions inherited from wpi::uv::Handle | |
Handle (uv_handle_t *uv_handle) | |
void | Keep () noexcept |
void | Release () noexcept |
void | ForceClosed () noexcept |
template<typename F , typename... Args> | |
bool | Invoke (F &&f, Args &&... args) const |
Static Protected Member Functions inherited from wpi::uv::Handle | |
static void | AllocBuf (uv_handle_t *handle, size_t size, uv_buf_t *buf) |
static void | DefaultFreeBuf (Buffer &buf) |
TCP handle.
TCP handles are used to represent both TCP streams and servers.
using wpi::uv::Tcp::Time = std::chrono::duration<uint64_t, std::milli> |
|
inlineexplicit |
|
overridedefaultnoexcept |
std::shared_ptr< Tcp > wpi::uv::Tcp::Accept | ( | ) |
Accept incoming connection.
This call is used in conjunction with Listen()
to accept incoming connections. Call this function after receiving a ListenEvent event to accept the connection. An error signal will be emitted in case of errors.
When the connection signal is emitted it is guaranteed that this function will complete successfully the first time. If you attempt to use it more than once, it may fail. It is suggested to only call this function once per connection signal.
|
inline |
Accept incoming connection.
This call is used in conjunction with Listen()
to accept incoming connections. Call this function after receiving a connection signal to accept the connection. An error signal will be emitted in case of errors.
When the connection signal is emitted it is guaranteed that this function will complete successfully the first time. If you attempt to use it more than once, it may fail. It is suggested to only call this function once per connection signal.
client | Client stream object. |
|
inline |
Bind the handle to an IPv4 or IPv6 address and port.
A successful call to this function does not guarantee that the call to Listen()
or Connect()
will work properly. An error signal can be emitted because of either this function or the ones mentioned above.
addr | Initialized sockaddr_in or sockaddr_in6 data structure. |
flags | Optional additional flags. |
|
inline |
|
inline |
void wpi::uv::Tcp::Bind | ( | std::string_view | ip, |
unsigned int | port, | ||
unsigned int | flags = 0 |
||
) |
Bind the handle to an IPv4 address and port.
A successful call to this function does not guarantee that the call to Listen()
or Connect()
will work properly. An error signal can be emitted because of either this function or the ones mentioned above.
Available flags are:
ip | The address to which to bind. |
port | The port to which to bind. |
flags | Optional additional flags. |
void wpi::uv::Tcp::Bind6 | ( | std::string_view | ip, |
unsigned int | port, | ||
unsigned int | flags = 0 |
||
) |
Bind the handle to an IPv6 address and port.
A successful call to this function does not guarantee that the call to Listen()
or Connect()
will work properly. An error signal can be emitted because of either this function or the ones mentioned above.
Available flags are:
ip | The address to which to bind. |
port | The port to which to bind. |
flags | Optional additional flags. |
void wpi::uv::Tcp::CloseReset | ( | ) |
Resets a TCP connection by sending a RST packet.
This is accomplished by setting the SO_LINGER socket option with a linger interval of zero and then calling Close(). Due to some platform inconsistencies, mixing of Shutdown() and CloseReset() calls is not allowed.
void wpi::uv::Tcp::Connect | ( | const sockaddr & | addr, |
const std::shared_ptr< TcpConnectReq > & | req | ||
) |
Establish an IPv4 or IPv6 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The connected signal is emitted on the request when the connection has been established. The error signal is emitted on the request in case of errors during the connection.
addr | Initialized sockaddr_in or sockaddr_in6 data structure. |
req | connection request |
void wpi::uv::Tcp::Connect | ( | const sockaddr & | addr, |
std::function< void()> | callback | ||
) |
Establish an IPv4 or IPv6 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The callback is called when the connection has been established. Errors are reported to the stream error handler.
addr | Initialized sockaddr_in or sockaddr_in6 data structure. |
callback | Callback function to call when connection established |
|
inline |
|
inline |
|
inline |
|
inline |
void wpi::uv::Tcp::Connect | ( | std::string_view | ip, |
unsigned int | port, | ||
const std::shared_ptr< TcpConnectReq > & | req | ||
) |
Establish an IPv4 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The connected signal is emitted on the request when the connection has been established. The error signal is emitted on the request in case of errors during the connection.
ip | The address to which to connect to. |
port | The port to which to connect to. |
req | connection request |
void wpi::uv::Tcp::Connect | ( | std::string_view | ip, |
unsigned int | port, | ||
std::function< void()> | callback | ||
) |
Establish an IPv4 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The callback is called when the connection has been established. Errors are reported to the stream error handler.
ip | The address to which to connect to. |
port | The port to which to connect to. |
callback | Callback function to call when connection established |
void wpi::uv::Tcp::Connect6 | ( | std::string_view | ip, |
unsigned int | port, | ||
const std::shared_ptr< TcpConnectReq > & | req | ||
) |
Establish an IPv6 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The connected signal is emitted on the request when the connection has been established. The error signal is emitted on the request in case of errors during the connection.
ip | The address to which to connect to. |
port | The port to which to connect to. |
req | connection request |
void wpi::uv::Tcp::Connect6 | ( | std::string_view | ip, |
unsigned int | port, | ||
std::function< void()> | callback | ||
) |
Establish an IPv6 TCP connection.
On Windows if the addr is initialized to point to an unspecified address (0.0.0.0
or ::
) it will be changed to point to localhost. This is done to match the behavior of Linux systems.
The callback is called when the connection has been established. Errors are reported to the stream error handler.
ip | The address to which to connect to. |
port | The port to which to connect to. |
callback | Callback function to call when connection established |
|
inlinestatic |
Create a TCP handle.
loop | Loop object where this handle runs. |
flags | Flags |
|
static |
Create a TCP handle.
loop | Loop object where this handle runs. |
flags | Flags |
sockaddr_storage wpi::uv::Tcp::GetPeer | ( | ) |
Get the address of the peer connected to the handle.
sockaddr_storage wpi::uv::Tcp::GetSock | ( | ) |
Get the current address to which the handle is bound.
|
inline |
Open an existing file descriptor or SOCKET as a TCP handle.
sock | A valid socket handle (either a file descriptor or a SOCKET). |
void wpi::uv::Tcp::Reuse | ( | std::function< void()> | callback, |
unsigned int | flags = AF_UNSPEC |
||
) |
Reuse this handle.
This closes the handle, and after the close completes, reinitializes it (identically to Create) and calls the provided callback. Unlike Close(), it does NOT emit the closed signal, however, IsClosing() will return true until the callback is called. This does nothing if IsClosing() is true (e.g. if Close() was called).
flags | Flags |
callback | Callback |
Enable/Disable TCP keep-alive.
enable | True to enable it, false otherwise. |
time | Initial delay in seconds (use std::chrono::duration<unsigned int> ). |
|
inline |
Enable no delay operation (turns off Nagle's algorithm).
enable | True to enable it, false otherwise. |
|
inline |
Enable/Disable simultaneous asynchronous accept requests.
Enable/Disable simultaneous asynchronous accept requests that are queued by the operating system when listening for new TCP connections. This setting is used to tune a TCP server for the desired performance. Having simultaneous accepts can significantly improve the rate of accepting connections (which is why it is enabled by default) but may lead to uneven load distribution in multi-process setups.
enable | True to enable it, false otherwise. |