uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | List of all members
uvco::TcpStream Class Reference

#include <tcp_stream.h>

Inheritance diagram for uvco::TcpStream:
Inheritance graph
[legend]
Collaboration diagram for uvco::TcpStream:
Collaboration graph
[legend]

Public Member Functions

 TcpStream (std::unique_ptr< uv_tcp_t > tcp)
 
 TcpStream (const TcpStream &)=delete
 
 TcpStream (TcpStream &&)=default
 
TcpStreamoperator= (const TcpStream &)=delete
 
TcpStreamoperator= (TcpStream &&)=default
 
 ~TcpStream () override=default
 
AddressHandle getPeerName () const
 Return address of peer.
 
AddressHandle getSockName () const
 Return bound address of socket.
 
Promise< void > closeReset ()
 
void keepAlive (bool enable, unsigned int delay=10)
 Set keep-alive delay in seconds.
 
void noDelay (bool enable)
 Enable Nagle's algorithm.
 
- Public Member Functions inherited from uvco::StreamBase
template<typename Stream >
 StreamBase (std::unique_ptr< Stream > stream)
 
 StreamBase (const StreamBase &)=delete
 
 StreamBase (StreamBase &&)=default
 
StreamBaseoperator= (const StreamBase &)=delete
 
StreamBaseoperator= (StreamBase &&)=default
 
virtual ~StreamBase ()
 
Promise< std::optional< std::string > > read (size_t maxSize=defaultMaxReadSize)
 
Promise< size_t > read (std::span< char > buffer)
 
Promise< size_t > write (std::string buf)
 
Promise< void > shutdown ()
 
Promise< void > close ()
 
const uv_stream_t * underlying () const
 Return the underlying UV stream object.
 

Additional Inherited Members

- Static Public Attributes inherited from uvco::StreamBase
static constexpr size_t defaultMaxReadSize = 4096
 
- Protected Member Functions inherited from uvco::StreamBase
uv_stream_t & stream ()
 
void destroyStream ()
 

Detailed Description

A stream referring to a TCP connection.

Constructor & Destructor Documentation

◆ TcpStream() [1/3]

uvco::TcpStream::TcpStream ( std::unique_ptr< uv_tcp_t >  tcp)
inlineexplicit
26 : StreamBase{std::move(tcp)} {}
StreamBase(std::unique_ptr< Stream > stream)
Definition stream.h:35

◆ TcpStream() [2/3]

uvco::TcpStream::TcpStream ( const TcpStream )
delete

◆ TcpStream() [3/3]

uvco::TcpStream::TcpStream ( TcpStream &&  )
default

◆ ~TcpStream()

uvco::TcpStream::~TcpStream ( )
overridedefault

Member Function Documentation

◆ closeReset()

Promise< void > uvco::TcpStream::closeReset ( )

Sends RST to TCP peer and closes stream, frees associated memory. Must be awaited to avoid resource leaks.

17 {
18 co_await closeHandle((uv_tcp_t *)&stream(), uv_tcp_close_reset);
20}
uv_stream_t & stream()
Definition stream.h:91
void destroyStream()
Definition stream.h:95
Promise< void > closeHandle(T *handle, C closer)
Definition close.h:28

◆ getPeerName()

AddressHandle uvco::TcpStream::getPeerName ( ) const

Return address of peer.

31 {
32 struct sockaddr_storage addr {};
33 int namelen = sizeof(addr);
34 uv_tcp_getpeername((const uv_tcp_t *)underlying(), (struct sockaddr *)&addr,
35 &namelen);
36 const AddressHandle address{(struct sockaddr *)&addr};
37 return address;
38};
const uv_stream_t * underlying() const
Return the underlying UV stream object.
Definition stream.h:88

◆ getSockName()

AddressHandle uvco::TcpStream::getSockName ( ) const

Return bound address of socket.

22 {
23 struct sockaddr_storage addr {};
24 int namelen = sizeof(addr);
25 uv_tcp_getsockname((const uv_tcp_t *)underlying(), (struct sockaddr *)&addr,
26 &namelen);
27 const AddressHandle address{(struct sockaddr *)&addr};
28 return address;
29}

◆ keepAlive()

void uvco::TcpStream::keepAlive ( bool  enable,
unsigned int  delay = 10 
)

Set keep-alive delay in seconds.

40 {
41 uv_tcp_keepalive((uv_tcp_t *)&stream(), static_cast<int>(enable), delay);
42}

◆ noDelay()

void uvco::TcpStream::noDelay ( bool  enable)

Enable Nagle's algorithm.

44 {
45 uv_tcp_nodelay((uv_tcp_t *)&stream(), static_cast<int>(enable));
46}

◆ operator=() [1/2]

TcpStream & uvco::TcpStream::operator= ( const TcpStream )
delete

◆ operator=() [2/2]

TcpStream & uvco::TcpStream::operator= ( TcpStream &&  )
default

The documentation for this class was generated from the following files: