E-MailRelay

Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
GNet::Socket Class Reference

An internet-protocol socket class. More...

`#include <gsocket.h>`

Inheritance diagram for GNet::Socket:

## Public Member Functions
Address | getLocalAddress () const
| Retrieves local address of the socket. More...
std::pair< bool, Address > | getPeerAddress () const
| Retrieves address of socket's peer. More...
void | bind (const Address &)
| Binds the socket with the given address. More...
bool | bind (const Address &, std::nothrow_t)
| No-throw overload. Returns false on error. More...
unsigned long | getBoundScopeId () const
| Returns the scope-id of the address last successfully bind()ed. 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...
void | shutdown (int how=1)
| Modifies the local socket state so that so that new sends (1 or 2) and/or receives (0 or 2) will fail. More...
| Socket (const Socket &)=delete
| Socket (Socket &&)=delete
void | operator= (const Socket &)=delete
void | operator= (Socket &&)=delete
Public Member Functions inherited from GNet::SocketBase
| ~SocketBase () override
| Destructor. More...
SOCKET | fd () const noexcept override
| Returns the socket file descriptor. More...
bool | eWouldBlock () const override
| Returns true if the previous socket operation failed because the socket would have blocked. More...
bool | eInProgress () const
| Returns true if the previous socket operation failed with the EINPROGRESS error status. More...
bool | eMsgSize () const
| Returns true if the previous socket operation failed with the EMSGSIZE error status. More...
bool | eTooMany () const
| Returns true if the previous socket operation failed with the EMFILE error status, or similar. More...
bool | eNotConn () const
| Returns true if the previous socket operation failed with the ENOTCONN error status, or similar. More...
void | addReadHandler (EventHandler &, ExceptionSink)
| Adds this socket to the event source list so that the given handler receives read events. More...
void | dropReadHandler () noexcept
| Reverses addReadHandler(). More...
void | addWriteHandler (EventHandler &, ExceptionSink)
| Adds this socket to the event source list so that the given handler receives write events when flow control is released. More...
void | dropWriteHandler () noexcept
| Reverses addWriteHandler(). More...
void | addOtherHandler (EventHandler &, ExceptionSink)
| Adds this socket to the event source list so that the given handler receives exception events. More...
void | dropOtherHandler () noexcept
| Reverses addOtherHandler(). More...
std::string | asString () const
| Returns the socket handle as a string. More...
std::string | reason () const
| Returns the reason for the previous error. More...
| SocketBase (const SocketBase &)=delete
| SocketBase (SocketBase &&)=delete
void | operator= (const SocketBase &)=delete
void | operator= (SocketBase &&)=delete
Public Member Functions inherited from G::ReadWrite
virtual ssize_type | read (char *buffer, size_type buffer_length)=0
| Reads data. More...
virtual ssize_type | write (const char *buf, size_type len)=0
| Sends data. More...
virtual bool | eWouldBlock () const =0
| See read() and write(). More...
virtual SOCKET | fd () const noexcept=0
| Returns the file descriptor. More...
virtual | ~ReadWrite ()=default
| Destructor.

## Static Public Member Functions
static std::string | canBindHint (const Address &address, bool stream_socket=true)
| Returns the empty string if a socket could probably be bound with the given address or a failure reason. More...
Static Public Member Functions inherited from GNet::SocketBase
static bool | supports (Address::Family, int type, int protocol)
| Returns true if sockets can be created with the given parameters. More...

## Protected Member Functions
| Socket (Address::Family, int type, int protocol)
| Socket (Address::Family, Descriptor s, const Accepted &)
std::pair< bool, Address > | getLocalAddress (std::nothrow_t) const
void | setOption (int, const char *, int, int)
bool | setOption (int, const char *, int, int, std::nothrow_t)
bool | setOptionImp (int, int, const void *, socklen_t)
void | setOptionsOnBind (Address::Family)
void | setOptionsOnConnect (Address::Family)
void | setOptionLingerImp (int, int)
void | setOptionNoLinger ()
void | setOptionReuse ()
void | setOptionExclusive ()
void | setOptionPureV6 ()
bool | setOptionPureV6 (std::nothrow_t)
void | setOptionKeepAlive ()
Protected Member Functions inherited from GNet::SocketBase
| SocketBase (Address::Family, int type, int protocol)
| Constructor used by derived classes. More...
| SocketBase (Address::Family, Descriptor s)
| Constructor used by derived classes. More...
| SocketBase (Address::Family, Descriptor s, const Accepted &)
| Constructor used by StreamSocket::accept() to create a socket object from a newly accept()ed socket handle. More...
| SocketBase (const Raw &, int domain, int type, int protocol)
| Constructor for a raw socket. More...
ssize_type | writeImp (const char *buf, size_type len)
| Writes to the socket. More...
void | clearReason ()
| Clears the saved errno. More...
void | saveReason ()
| Saves the current errno following error()/sizeError(). More...
void | saveReason () const
| Saves the current errno following error()/sizeError(). More...
bool | isFamily (Address::Family) const
| Returns true if the socket family is as given. More...

## Additional Inherited Members
Public Types inherited from GNet::SocketBase
using | size_type = G::ReadWrite::size_type
using | ssize_type = G::ReadWrite::ssize_type
Public Types inherited from G::ReadWrite
using | size_type = std::size_t
using | ssize_type = ssize_t
Static Protected Member Functions inherited from GNet::SocketBase
static bool | error (int rc)
| Returns true if the given return code indicates an error. More...
static bool | sizeError (ssize_type size)
| Returns true if the given write() return value indicates an error. More...

## Detailed Description

An internet-protocol socket class.

Provides bind(), listen(), and connect(); the base classes provide write(); and derived classes provide accept() and read().

Definition at line 205 of file gsocket.h.

## Constructor & Destructor Documentation

## ◆ Socket() [1/2]

GNet::Socket::Socket | ( | Address::Family | af,
|  | int | type,
|  | int | protocol
| ) |  |
| protected

Definition at line 231 of file gsocket.cpp.

## ◆ Socket() [2/2]

GNet::Socket::Socket | ( | Address::Family | af,
|  | Descriptor | s,
|  | const Accepted & | a
| ) |  |
| protected

Definition at line 236 of file gsocket.cpp.

## Member Function Documentation

## ◆ bind() [1/2]

void GNet::Socket::bind | ( | const Address & | local_address | ) |

Binds the socket with the given address.

Definition at line 241 of file gsocket.cpp.

## ◆ bind() [2/2]

bool GNet::Socket::bind | ( | const Address & | local_address,
|  | std::nothrow_t |
| ) |  |

No-throw overload. Returns false on error.

Definition at line 259 of file gsocket.cpp.

## ◆ canBindHint()

std::string GNet::Socket::canBindHint | ( | const Address & | address,
|  | bool | stream_socket = `true`
| ) |  |
| static

Returns the empty string if a socket could probably be bound with the given address or a failure reason.

Some implementations will always return the empty string.

Definition at line 152 of file gsocket_unix.cpp.

## ◆ connect()

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 282 of file gsocket.cpp.

## ◆ getBoundScopeId()

unsigned long GNet::Socket::getBoundScopeId | ( |  | ) | const

Returns the scope-id of the address last successfully bind()ed.

Note that getLocalAddress() has a zero scope-id even after bind()ing an address with a non-zero scope-id.

Definition at line 277 of file gsocket.cpp.

## ◆ getLocalAddress()

GNet::Address GNet::Socket::getLocalAddress | ( |  | ) | const

Retrieves local address of the socket.

Definition at line 326 of file gsocket.cpp.

## ◆ getPeerAddress()

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

Retrieves address of socket's peer.

Returns false in 'first' if none, ie. not yet connected.

Definition at line 338 of file gsocket.cpp.

## ◆ listen()

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

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

Definition at line 316 of file gsocket.cpp.

## ◆ setOption() [1/2]

void GNet::Socket::setOption | ( | int | level,
|  | const char * | opp,
|  | int | op,
|  | int | arg
| ) |  |
| protected

Definition at line 416 of file gsocket.cpp.

## ◆ setOption() [2/2]

bool GNet::Socket::setOption | ( | int | level,
|  | const char * | ,
|  | int | op,
|  | int | arg,
|  | std::nothrow_t |
| ) |  |
| protected

Definition at line 407 of file gsocket.cpp.

## ◆ setOptionExclusive()

void GNet::Socket::setOptionExclusive | ( |  | ) |
| protected

Definition at line 179 of file gsocket_unix.cpp.

## ◆ setOptionImp()

bool GNet::Socket::setOptionImp | ( | int | level,
|  | int | op,
|  | const void * | arg,
|  | socklen_t | n
| ) |  |
| protected

Definition at line 200 of file gsocket_unix.cpp.

## ◆ setOptionKeepAlive()

void GNet::Socket::setOptionKeepAlive | ( |  | ) |
| protected

Definition at line 384 of file gsocket.cpp.

## ◆ setOptionLingerImp()

void GNet::Socket::setOptionLingerImp | ( | int | onoff,
|  | int | time
| ) |  |
| protected

Definition at line 394 of file gsocket.cpp.

## ◆ setOptionNoLinger()

void GNet::Socket::setOptionNoLinger | ( |  | ) |
| protected

Definition at line 389 of file gsocket.cpp.

## ◆ setOptionPureV6() [1/2]

void GNet::Socket::setOptionPureV6 | ( |  | ) |
| protected

Definition at line 184 of file gsocket_unix.cpp.

## ◆ setOptionPureV6() [2/2]

bool GNet::Socket::setOptionPureV6 | ( | std::nothrow_t |  | ) |
| protected

Definition at line 193 of file gsocket_unix.cpp.

## ◆ setOptionReuse()

void GNet::Socket::setOptionReuse | ( |  | ) |
| protected

Definition at line 173 of file gsocket_unix.cpp.

## ◆ setOptionsOnBind()

void GNet::Socket::setOptionsOnBind | ( | Address::Family | af | ) |
| protected

Definition at line 369 of file gsocket.cpp.

## ◆ setOptionsOnConnect()

void GNet::Socket::setOptionsOnConnect | ( | Address::Family | af | ) |
| protected

Definition at line 358 of file gsocket.cpp.

## ◆ shutdown()

void GNet::Socket::shutdown | ( | int | how = `1` | ) |

Modifies the local socket state so that so that new sends (1 or 2) and/or receives (0 or 2) will fail.

If receives are shut-down then anything received will be rejected with a RST.

If sends are shut-down then the transmit queue is drained and a final empty FIN packet is sent when fully acknowledged. See also RFC-793 3.5.

Errors are ignored.

Definition at line 352 of file gsocket.cpp.

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

- /usr/src/slapt-src-x86_64/network/emailrelay/emailrelay-2.3/src/gnet/gsocket.h
- /usr/src/slapt-src-x86_64/network/emailrelay/emailrelay-2.3/src/gnet/gsocket.cpp
- /usr/src/slapt-src-x86_64/network/emailrelay/emailrelay-2.3/src/gnet/gsocket_unix.cpp