27 struct private_init {};
30 using Time = std::chrono::seconds;
32 explicit Tcp(
const private_init&) {}
33 ~Tcp() noexcept override = default;
42 unsigned int flags = AF_UNSPEC);
51 unsigned int flags = AF_UNSPEC) {
65 void Reuse(std::function<
void()> callback,
unsigned int flags = AF_UNSPEC);
100 bool Accept(
const std::shared_ptr<Tcp>& client) {
130 static_cast<unsigned>(time.count())) == 0;
162 void Bind(
const sockaddr& addr,
unsigned int flags = 0) {
166 void Bind(
const sockaddr_in& addr,
unsigned int flags = 0) {
167 Bind(
reinterpret_cast<const sockaddr&
>(addr),
flags);
170 void Bind(
const sockaddr_in6& addr,
unsigned int flags = 0) {
171 Bind(
reinterpret_cast<const sockaddr&
>(addr),
flags);
188 void Bind(std::string_view ip,
unsigned int port,
unsigned int flags = 0);
204 void Bind6(std::string_view ip,
unsigned int port,
unsigned int flags = 0);
233 void Connect(
const sockaddr& addr,
const std::shared_ptr<TcpConnectReq>& req);
236 const std::shared_ptr<TcpConnectReq>& req) {
237 Connect(
reinterpret_cast<const sockaddr&
>(addr), req);
241 const std::shared_ptr<TcpConnectReq>& req) {
242 Connect(
reinterpret_cast<const sockaddr&
>(addr), req);
258 void Connect(
const sockaddr& addr, std::function<
void()> callback);
260 void Connect(
const sockaddr_in& addr, std::function<
void()> callback) {
261 Connect(
reinterpret_cast<const sockaddr&
>(addr), std::move(callback));
264 void Connect(
const sockaddr_in6& addr, std::function<
void()> callback) {
265 Connect(
reinterpret_cast<const sockaddr&
>(addr), std::move(callback));
284 void Connect(std::string_view ip,
unsigned int port,
285 const std::shared_ptr<TcpConnectReq>& req);
301 void Connect(std::string_view ip,
unsigned int port,
302 std::function<
void()> callback);
320 void Connect6(std::string_view ip,
unsigned int port,
321 const std::shared_ptr<TcpConnectReq>& req);
337 void Connect6(std::string_view ip,
unsigned int port,
338 std::function<
void()> callback);
352 std::function<void()> callback;
355 std::unique_ptr<ReuseData> m_reuseData;
NetworkStream & GetStream() const
Definition NetworkStream.hpp:27
bool Invoke(F &&f, Args &&... args) const
Definition Handle.hpp:265
Event loop.
Definition Loop.hpp:35
virtual NetworkStream * DoAccept()=0
std::shared_ptr< NetworkStream > Accept()
Accept incoming connection.
Definition NetworkStream.hpp:90
uv_tcp_t * GetRaw() const noexcept
Definition NetworkStream.hpp:141
NetworkStreamImpl()
Definition NetworkStream.hpp:146
TCP connection request.
Definition Tcp.hpp:361
Tcp & GetStream() const
Definition Tcp.hpp:363
TCP handle.
Definition Tcp.hpp:26
sockaddr_storage GetPeer()
Get the address of the peer connected to the handle.
void Connect(const sockaddr_in6 &addr, const std::shared_ptr< TcpConnectReq > &req)
Definition Tcp.hpp:240
void Bind(const sockaddr &addr, unsigned int flags=0)
Bind the handle to an IPv4 or IPv6 address and port.
Definition Tcp.hpp:162
void Connect6(std::string_view ip, unsigned int port, const std::shared_ptr< TcpConnectReq > &req)
Establish an IPv6 TCP connection.
void Connect(const sockaddr &addr, std::function< void()> callback)
Establish an IPv4 or IPv6 TCP connection.
void Connect(const sockaddr &addr, const std::shared_ptr< TcpConnectReq > &req)
Establish an IPv4 or IPv6 TCP connection.
void Connect6(std::string_view ip, unsigned int port, std::function< void()> callback)
Establish an IPv6 TCP connection.
sockaddr_storage GetSock()
Get the current address to which the handle is bound.
bool SetSimultaneousAccepts(bool enable)
Enable/Disable simultaneous asynchronous accept requests.
Definition Tcp.hpp:147
static std::shared_ptr< Tcp > Create(Loop &loop, unsigned int flags=AF_UNSPEC)
Create a TCP handle.
void Bind(std::string_view ip, unsigned int port, unsigned int flags=0)
Bind the handle to an IPv4 address and port.
bool SetNoDelay(bool enable)
Enable no delay operation (turns off Nagle's algorithm).
Definition Tcp.hpp:119
void Reuse(std::function< void()> callback, unsigned int flags=AF_UNSPEC)
Reuse this handle.
void CloseReset()
Resets a TCP connection by sending a RST packet.
bool Accept(const std::shared_ptr< Tcp > &client)
Accept incoming connection.
Definition Tcp.hpp:100
void Connect(std::string_view ip, unsigned int port, std::function< void()> callback)
Establish an IPv4 TCP connection.
void Open(uv_os_sock_t sock)
Open an existing file descriptor or SOCKET as a TCP handle.
Definition Tcp.hpp:112
void Connect(std::string_view ip, unsigned int port, const std::shared_ptr< TcpConnectReq > &req)
Establish an IPv4 TCP connection.
std::shared_ptr< Tcp > Accept()
Accept incoming connection.
~Tcp() noexcept override=default
void Connect(const sockaddr_in6 &addr, std::function< void()> callback)
Definition Tcp.hpp:264
void Connect(const sockaddr_in &addr, const std::shared_ptr< TcpConnectReq > &req)
Definition Tcp.hpp:235
void Connect(const sockaddr_in &addr, std::function< void()> callback)
Definition Tcp.hpp:260
void Bind(const sockaddr_in &addr, unsigned int flags=0)
Definition Tcp.hpp:166
bool SetKeepAlive(bool enable, Time time=Time{0})
Enable/Disable TCP keep-alive.
Definition Tcp.hpp:128
void Bind6(std::string_view ip, unsigned int port, unsigned int flags=0)
Bind the handle to an IPv6 address and port.
Tcp(const private_init &)
Definition Tcp.hpp:32
void Bind(const sockaddr_in6 &addr, unsigned int flags=0)
Definition Tcp.hpp:170
std::chrono::seconds Time
Definition Tcp.hpp:30
Definition StringMap.hpp:773
Definition Prepare.hpp:14
flags
Definition http_parser.hpp:206
UV_EXTERN int uv_tcp_keepalive(uv_tcp_t *handle, int enable, unsigned int delay)
UV_EXTERN int uv_tcp_open(uv_tcp_t *handle, uv_os_sock_t sock)
UV_EXTERN int uv_tcp_nodelay(uv_tcp_t *handle, int enable)
UV_EXTERN int uv_tcp_bind(uv_tcp_t *handle, const struct sockaddr *addr, unsigned int flags)
UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t *handle, int enable)