Bredbandskollen CLI
1.2
Asynchronous network task engine
|
This is a slave to the Engine class. You can't use it directly, only through its subclasses, SocketConnection or ServerSocket. More...
#include <socket.h>
Public Member Functions | |
Socket (const std::string &label, Task *owner, const std::string &hostname, uint16_t port) | |
Socket (const std::string &label, Task *owner, int fd) | |
Task * | owner () const |
Return task owning the socket. | |
std::string | hostname () const |
Return name of the host to which the socket is supposed to connect. | |
uint16_t | port () const |
Return port number to which the socket is supposed to connect. | |
PollState | state () const |
Return current socket state. | |
int | getUnixDomainPeer () const |
Return the peer socket descriptor. More... | |
virtual std::string | cacheLabel () |
Return the socket's cache group, or an empty string. More... | |
int | id () const |
Return unique connection ID if connected. More... | |
virtual void | setOwner (Task *t) |
Set the given task as owner of the socket. | |
void | setExpiry (double s) |
Set a time to live for the socket. More... | |
bool | hasExpired (const TimePoint &when) const |
Return true if the given TimePoint is after the socket's expiry. | |
const char * | localIp () const |
Return local IP address in static buffer. | |
struct addrinfo * | getAddressInfo (uint16_t iptype=0) |
Perform DNS lookup of remote host. | |
Public Member Functions inherited from Logger | |
Logger (std::string label) | |
std::string | label () const |
Return the object's log label. | |
void | resetLabel (const std::string &new_label) |
Modify the object's log label. | |
Static Public Member Functions | |
static const char * | getIp (int fd, uint16_t *port=nullptr, bool peer=true) |
Return IP address of connected socket in static buffer. More... | |
static const char * | getIp (struct sockaddr *address, uint16_t *port=nullptr) |
Return IP address in static buffer. | |
static const char * | getIp (struct addrinfo *address, uint16_t *port=nullptr) |
Return IP address in static buffer. | |
Static Public Member Functions inherited from Logger | |
static void | setLogFile (std::ostream &stream) |
Set global log destination. More... | |
static void | reopenLogFile (const std::string &filename) |
If current log is a file (ofstream), reopen it with new filename: | |
static void | setLogLimit (unsigned int loglines=0, unsigned int warnlines=0, unsigned int errlines=0) |
Set max number of lines of info/warn/err log. More... | |
static void | sayTime (std::ostream &stream) |
Write current local time to the given stream. | |
static bool | inError () |
Return true if any error has been logged (globally since start) | |
static std::ostream & | err_log (const std::string &label) |
Write a line of error log. More... | |
static std::ostream & | warn_log (const std::string &label) |
Write a line of warning log. More... | |
static std::ostream & | log (const std::string &label) |
Write a line of info log. More... | |
static void | flushLogFile () |
static void | pauseLogging () |
Disable all log output until next call to Logger::setLogFile. | |
static double | secondsSince (const TimePoint &t) |
static double | secondsTo (const TimePoint &t) |
static int64_t | msSince (const TimePoint &t) |
static int64_t | msTo (const TimePoint &t) |
static bool | hasExpired (const TimePoint &t) |
Return true if current time is after the given TimePoint. | |
static TimePoint | timeNow () |
Return current time. | |
static TimePoint | timeAfter (double s) |
Return current time plus s seconds. | |
static TimePoint | timeMax () |
Return a very distant time. | |
static std::chrono::microseconds | toUs (double t) |
Convert s (seconds) to std::chrono::microseconds. | |
static std::string | dateString (time_t t=0) |
Return local time, formatted as 2023-10-14T09:38:47+0200. | |
static std::string | dateString2 (time_t t=0) |
Return local time, formatted as Sat, 14 Oct 2023 09:38:47. | |
static std::string | createHashKey (unsigned int length=20) |
Return a random string. More... | |
Protected Member Functions | |
virtual bool | wantToSend () |
Return true if socket is watched for writeability. | |
virtual PollState | checkReadBlock () |
This will be called regularly on READ_BLOCKED sockets to check if the block can be lifted. More... | |
void | setWantToSend () |
Notify intention of sending large amounts of data. More... | |
int | socket () const |
Return file descriptor. | |
void | closeMe () |
Tell the network engine that the connection should be closed. | |
void | createNonBlockingSocket (struct addrinfo *addressEntry, struct addrinfo *localAddr=nullptr) |
Create socket and initiate the connection. More... | |
bool | setNonBlocking (int fd) |
Set socket as non-blocking. | |
bool | inError () const |
Return true if the socket has encountered a fatal error. | |
Protected Member Functions inherited from Logger | |
std::ostream & | errno_log () const |
Write a line of error log after a failed system call has set the global errno to a non-zero value. More... | |
std::ostream & | err_log () const |
Write a line of error log. More... | |
std::ostream & | warn_log () const |
Write a line of warning log. More... | |
std::ostream & | log () const |
Write a line of info log. More... | |
std::ostream & | dbg_log () const |
Write a line of debug log. More... | |
Static Protected Member Functions | |
static bool | isTempError () |
Return true unless last syscall encountered a fatal error. | |
static int | closeSocket (int fd) |
Close a file descriptor. | |
static bool | socketInError (int fd) |
Return true if the file descriptor has encountered a fatal error. | |
Friends | |
class | Engine |
This is a slave to the Engine class. You can't use it directly, only through its subclasses, SocketConnection or ServerSocket.
|
inlinevirtual |
Return the socket's cache group, or an empty string.
By default, if we have a keepalive (cached) connection to the same host and port, it will be used instead of creating a new connection. Override this method to disable keepalive (returning empty string) or to use only a special type of cached connection (returning a label for that special type).
Reimplemented in HttpClientConnection, and ServerSocket.
|
inlineprotectedvirtual |
This will be called regularly on READ_BLOCKED sockets to check if the block can be lifted.
If your subclass ever returns READ_BLOCKED, it should override this method to return the new state when the block should be removed.
|
protected |
Create socket and initiate the connection.
Will do no nothing if socket has already been created. On error, socket() will return -1.
|
static |
Return IP address of connected socket in static buffer.
Return the local IP address if peer==false, otherwise the peer IP.
|
inline |
Return the peer socket descriptor.
If this is a Unix Domain socket, return the peer socket descriptor. If not, return 0.
May be used in another thread or process.
|
inline |
Return unique connection ID if connected.
Return a positive number that is unique to this connection if it is active, otherwise -1.
|
inline |
Set a time to live for the socket.
Call this to have the socket removed automatically before a given number of seconds. Note: the network engine might remove the socket 1-2 seconds before the timeout, so adjust the timeout value accordingly!
|
inlineprotected |
Notify intention of sending large amounts of data.
Normally, this is done simply by returning PollState::READ_WRITE from a scoket callback. This method is useful if you're not inside such a callback when you find out you need to send (large amounts of) data.