VideoTools
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
GNet::Socket Class Referenceabstract

The Socket class encapsulates a non-blocking Unix socket file descriptor or a Windows 'SOCKET' handle. More...

#include <gsocket.h>

+ Inheritance diagram for GNet::Socket:

Classes

struct  NoThrow
 Overload discriminator class for GNet::Socket. More...
 

Public Types

typedef G::ReadWrite::size_type size_type
 
typedef G::ReadWrite::ssize_type ssize_type
 
- Public Types inherited from G::ReadWrite
typedef size_t size_type
 
typedef ssize_t ssize_type
 

Public Member Functions

virtual ~Socket ()
 Destructor.
 
std::pair< bool, AddressgetLocalAddress () const
 Retrieves local address of the socket. More...
 
std::pair< bool, AddressgetPeerAddress () const
 Retrieves address of socket's peer. More...
 
bool hasPeer () const
 Returns true if the socket has a valid peer. More...
 
void bind (const Address &)
 Binds the socket with the given address.
 
bool bind (const Address &, NoThrow)
 No-throw overload. Returns false on error.
 
bool canBindHint (const Address &address)
 Returns true if the socket can probably be bound with the given address. More...
 
bool connect (const Address &addr, bool *done=nullptr)
 Initiates a connection to (or association with) the given address. More...
 
void listen (int backlog=1)
 Starts the socket listening on the bound address for incoming connections or incoming datagrams. More...
 
virtual ssize_type read (char *buffer, size_type buffer_length) override=0
 Reads from the socket. More...
 
virtual ssize_type write (const char *buf, size_type len) override=0
 Writes to the socket. More...
 
virtual SOCKET fd () const
 Returns the socket descriptor. Override from G::ReadWrite.
 
virtual bool eWouldBlock ()
 Returns true if the previous socket operation failed because the socket would have blocked. More...
 
bool eInProgress ()
 Returns true if the previous socket operation failed with the EINPROGRESS error status. More...
 
bool eMsgSize ()
 Returns true if the previous socket operation failed with the EMSGSIZE error status. More...
 
void addReadHandler (EventHandler &handler)
 Adds this socket to the event source list so that the given handler receives read events. More...
 
void dropReadHandler ()
 Reverses addReadHandler().
 
void addWriteHandler (EventHandler &handler)
 Adds this socket to the event source list so that the given handler receives write events when flow control is released. More...
 
void dropWriteHandler ()
 Reverses addWriteHandler().
 
void addExceptionHandler (EventHandler &handler)
 Adds this socket to the event source list so that the given handler receives exception events. More...
 
void dropExceptionHandler ()
 Reverses addExceptionHandler().
 
std::string asString () const
 Returns the socket handle as a string. More...
 
std::string reasonString () const
 Returns the failure reason as a string. More...
 
void shutdown (bool for_writing=true)
 Shuts the socket for writing (or reading).
 
- Public Member Functions inherited from G::ReadWrite
virtual ~ReadWrite ()
 Destructor.
 

Protected Member Functions

 Socket (int domain, int type, int protocol)
 Constructor used by derived classes. More...
 
 Socket (Descriptor s)
 Constructor which creates a socket object from an existing socket handle. More...
 
void saveReason ()
 
void saveReason () const
 
void prepare ()
 
void setFault ()
 
void setOptionNoLinger ()
 
void setOptionReuse ()
 
void setOptionExclusive ()
 
void setOptionPureV6 (bool)
 
bool setOptionPureV6 (bool, NoThrow)
 
void setOptionKeepAlive ()
 
void setOption (int, const char *, int, int)
 
bool setOption (int, const char *, int, int, NoThrow)
 
bool setOptionImp (int, int, const void *, socklen_t)
 
std::pair< bool, AddressgetAddress (bool) const
 

Static Protected Member Functions

static int reason ()
 
static std::string reasonStringImp (int)
 
static bool error (int rc)
 
static bool sizeError (ssize_type size)
 

Protected Attributes

int m_reason
 
std::string m_reason_string
 
int m_domain
 
Descriptor m_socket
 

Detailed Description

The Socket class encapsulates a non-blocking Unix socket file descriptor or a Windows 'SOCKET' handle.

(Non-blocking network i/o is particularly appropriate for single-threaded server processes which manage multiple client connections. The main disagvantage is that flow control has to be managed explicitly: see Socket::write() and Socket::eWouldBlock().)

Provides bind(), listen(), connect(), write(); derived classes provide accept() and read(). Also interfaces to the event loop with addReadHandler() and addWriteHandler().

Definition at line 56 of file gsocket.h.

Constructor & Destructor Documentation

GNet::Socket::Socket ( int  domain,
int  type,
int  protocol 
)
protected

Constructor used by derived classes.

Opens the socket using socket().

Definition at line 32 of file gsocket.cpp.

GNet::Socket::Socket ( Descriptor  s)
explicitprotected

Constructor which creates a socket object from an existing socket handle.

Used only by StreamSocket::accept().

Definition at line 45 of file gsocket.cpp.

Member Function Documentation

void GNet::Socket::addExceptionHandler ( EventHandler handler)

Adds this socket to the event source list so that the given handler receives exception events.

A TCP exception event should be treated as a disconnection event. (Not used for datagram sockets.)

Definition at line 239 of file gsocket.cpp.

void GNet::Socket::addReadHandler ( EventHandler handler)

Adds this socket to the event source list so that the given handler receives read events.

Definition at line 222 of file gsocket.cpp.

void GNet::Socket::addWriteHandler ( EventHandler handler)

Adds this socket to the event source list so that the given handler receives write events when flow control is released.

(Not used for datagram sockets.)

Definition at line 233 of file gsocket.cpp.

std::string GNet::Socket::asString ( ) const

Returns the socket handle as a string.

Only used in debugging.

Definition at line 255 of file gsocket.cpp.

bool GNet::Socket::canBindHint ( const Address address)

Returns true if the socket can probably be bound with the given address.

Some implementations will always return true. This method should be used on a temporary socket of the correct dynamic type since this socket may become unusable.

Definition at line 88 of file gsocket_unix.cpp.

bool GNet::Socket::connect ( const Address addr,
bool *  done = nullptr 
)

Initiates a connection to (or association with) the given address.

Returns false on error.

If successful, a 'done' flag is returned by reference indicating whether the connect completed immediately. Normally a stream socket connection will take some time to complete so the 'done' flag will be false: the completion will be indicated by a write event some time later.

For datagram sockets this sets up an association between two addresses. The socket should first be bound with a local address.

Definition at line 125 of file gsocket.cpp.

bool GNet::Socket::eInProgress ( )

Returns true if the previous socket operation failed with the EINPROGRESS error status.

When connecting this can be considered a non-error.

Definition at line 73 of file gsocket_unix.cpp.

bool GNet::Socket::eMsgSize ( )

Returns true if the previous socket operation failed with the EMSGSIZE error status.

When writing to a datagram socket this indicates that the message was too big to send atomically.

Definition at line 78 of file gsocket_unix.cpp.

bool GNet::Socket::eWouldBlock ( )
virtual

Returns true if the previous socket operation failed because the socket would have blocked.

Override from G::ReadWrite.

Implements G::ReadWrite.

Definition at line 68 of file gsocket_unix.cpp.

std::pair< bool, GNet::Address > GNet::Socket::getLocalAddress ( ) const

Retrieves local address of the socket.

Pair.first is false on error.

Definition at line 207 of file gsocket.cpp.

std::pair< bool, GNet::Address > GNet::Socket::getPeerAddress ( ) const

Retrieves address of socket's peer.

'Pair.first' is false on error.

Definition at line 212 of file gsocket.cpp.

bool GNet::Socket::hasPeer ( ) const

Returns true if the socket has a valid peer.

This can be used to see if a connect succeeded.

Definition at line 217 of file gsocket.cpp.

void GNet::Socket::listen ( int  backlog = 1)

Starts the socket listening on the bound address for incoming connections or incoming datagrams.

Definition at line 179 of file gsocket.cpp.

virtual ssize_type GNet::Socket::read ( char *  buffer,
size_type  buffer_length 
)
overridepure virtual

Reads from the socket.

This is a default implementation that can be called explicitly from derived classes.

Implements G::ReadWrite.

Implemented in GNet::DatagramSocket, and GNet::StreamSocket.

std::string GNet::Socket::reasonString ( ) const

Returns the failure reason as a string.

Only used in debugging.

Definition at line 262 of file gsocket.cpp.

GNet::Socket::ssize_type GNet::Socket::write ( const char *  buf,
size_type  len 
)
overridepure virtual

Writes to the socket.

This is a default implementation that can be called explicitly from derived classes. Override from G::ReadWrite.

Implements G::ReadWrite.

Implemented in GNet::DatagramSocket, and GNet::StreamSocket.

Definition at line 160 of file gsocket.cpp.


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