E-MailRelay
|
An internet-protocol socket class. More...
#include <gsocket.h>
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 |
![]() | |
~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 |
![]() | |
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 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 () |
![]() | |
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 | |
![]() | |
using | size_type = G::ReadWrite::size_type |
using | ssize_type = G::ReadWrite::ssize_type |
![]() | |
using | size_type = std::size_t |
using | ssize_type = ssize_t |
![]() | |
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... | |
An internet-protocol socket class.
Provides bind(), listen(), and connect(); the base classes provide write(); and derived classes provide accept() and read().
|
protected |
Definition at line 231 of file gsocket.cpp.
|
protected |
Definition at line 236 of file gsocket.cpp.
void GNet::Socket::bind | ( | const Address & | local_address | ) |
Binds the socket with the given address.
Definition at line 241 of file gsocket.cpp.
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.
|
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.
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.
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.
GNet::Address GNet::Socket::getLocalAddress | ( | ) | const |
Retrieves local address of the socket.
Definition at line 326 of file gsocket.cpp.
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.
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.
|
protected |
Definition at line 416 of file gsocket.cpp.
|
protected |
Definition at line 407 of file gsocket.cpp.
|
protected |
Definition at line 179 of file gsocket_unix.cpp.
|
protected |
Definition at line 200 of file gsocket_unix.cpp.
|
protected |
Definition at line 384 of file gsocket.cpp.
|
protected |
Definition at line 394 of file gsocket.cpp.
|
protected |
Definition at line 389 of file gsocket.cpp.
|
protected |
Definition at line 184 of file gsocket_unix.cpp.
|
protected |
Definition at line 193 of file gsocket_unix.cpp.
|
protected |
Definition at line 173 of file gsocket_unix.cpp.
|
protected |
Definition at line 369 of file gsocket.cpp.
|
protected |
Definition at line 358 of file gsocket.cpp.
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.