Bredbandskollen CLI
1.2
Asynchronous network task engine
|
Pass sockets and messages between processes. More...
#include <socketreceiver.h>
Public Member Functions | |
SocketReceiver (Task *task, int sock, pid_t peer_pid) | |
virtual SocketConnection * | incoming () override |
Return connection object if new client available, else return nullptr. | |
int | passSocketToPeer (int fd) |
Return 0 for success, errno on failure. | |
ssize_t | passMessageToPeer (const char *buf, size_t len) |
Send data to peer. Return amount sent, or < 0 for error. | |
pid_t | peerPid () const |
Return PID of the peer process. | |
void | peerDead () |
Stop communication with peer process and terminate as soon as possible. | |
Public Member Functions inherited from ServerSocket | |
ServerSocket (const std::string &label, Task *task, uint16_t port, const std::string &ip="127.0.0.1") | |
Create a new server socket. More... | |
ServerSocket (int fd, const std::string &label, Task *owner) | |
Create a new server to listen on an existing file descriptor. | |
std::string | cacheLabel () override |
Server sockets shall not be cached. | |
void | stopListening () |
Schedule listen socket for removal. | |
void | tlsSetKey (unsigned int i) |
unsigned int | tlsKey () const |
Public Member Functions inherited from Socket | |
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... | |
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. | |
Additional Inherited Members | |
Static Public Member Functions inherited from Socket | |
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 inherited from Socket | |
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 inherited from Socket | |
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. | |
Pass sockets and messages between processes.
Typical use is to have a master process listen on a port, passing any new connections to child processes.
Both sockets and messages (data) may be passsed between processes.
A pair of Unix domain sockets must be created in the parent process, to be used by one SocketReceiver in the parent and one SocketReceiver in the child process.
SocketReceiver::SocketReceiver | ( | Task * | task, |
int | sock, | ||
pid_t | peer_pid | ||
) |
Add a SocketReceiver to the given Task. The sock
parameter shall be one of a pair of Unix domain sockets. The peer_pid
parameter is used only for logging.