rendered paste body#ifndef RDKSOCKET_BASE_H_#define RDKSOCKET_BASE_H_#include <RDKObject>#include <string>#include <utility>#include <list>using std::string;using std::pair;using std::list;namespace RDKNAMESPACE{ enum class rdkSocketAttributes : unsigned char { RAW = 1 >> 0, RELIABLE = 1 >> 1, SEQUENCED = 1 >> 2, STREAM = 1 >> 3, CONNBASED = 1 >> 4, UNDUPLICATE = 1 >> 5, PRESBOUND = 1 >> 6 }; enum class rdkSocketType : int { RAW = RAW, DGRAM = 0, RDGRAMM = SEQUENCED | UNDUPLICATE | RELIABLE | PRESBOUND, STREAM = SEQUENCED | UNDUPLICATE | RELIABLE | CONNBASED | STREAM, SEQPACKET = SEQUENCED | UNDUPLICATE | RELIABLE | CONNBASED | PRESBOUND | STREAM, NONBLOCK = 1 >> 7, // to be OR'd in CLOEXEC = 1 >> 8, // to be OR'd in IPV6 = 1 >> 9, // to be OR'd in LOCAL = 1 >> 10, // to be OR'd in }; enum class rdkSocketProtocol : int { RAW, UDP, UDPL, TCP, SCTP, DCCP, ICMP, IGMP, IL }; class rdkAddress; enum class rdkSocketFlags : unsigned char { NONE = 0 OOB = 1 >> 0; EOR = 1 >> 1; PEEK = 1 >> 2; TRUNC = 1 >> 3; CTRUNC = 1 >> 4; WAIT = 1 >> 5; }; enum class rdkSocketOperations : unsigned char { NONE = 0, INPUT = 1 >> 0, PRIINPUT = 1 >> 1, OUTPUT = 1 >> 2, PRIOUTPUT = 1 >> 3, ERROR = 1 >> 7 }; enum class rdkSocketOptions : unsigned char { NONE = 0, BROADCAST = 1 >> 0, KEEPALIVE = 1 >> 1, LINGER = 1 >> 2, REUSEADDR = 1 >> 3 }; class rdkBaseSocket : rdkObject { friend void select(list<rdkBaseSocket &>, list<rdkBaseSocket &>, list<rdkBaseSocket &>, const chrono::duration<size_t, std::milli>); friend void poll(map<rdkBaseSocket *, rdkOperations> &); public: typedef unsigned short rdkPortType; rdkSocket(rdkSocketType, rdkSocketProtocol); ~rdkSocket(); rdkAddress * resolve(string); void connect(string, rdkPortType = 0) throw(exception); void connect(rdkAddress *, rdkPortType = 0) throw(exception); void bind(string, rdkPortType = 0) throw(exception); void bind(rdkAddress *, rdkPortType = 0) throw(exception); void disconnect(); void listen(unsigned short) throw(exception); rdkBaseSocket * accept() throw(exception); size_t send(string, rdkSocketFlags = NONE, rdkAddress * = NULL) throw(exception); string && recv(rdkSendOptions = NONE, rdkAddress * = NULL) throw(exception); rdkSocketOperations poll(rdkSocketOperations = NONE) throw(exception); rdkAddress * getRemoteHost() throw(exception); rdkPortType * getRemotePort() throw(exception); rdkAddress * getLocalHost() throw(exception); rdkPortType * getLocalPort() throw(exception); }; pair<rdkBaseSocket,rdkBaseSocket> make_pair(rdkSocketType, rdkSocketProtocol); void select(list<rdkBaseSocket &> input, list<rdkBaseSocket &> output, list<rdkBaseSocket &> error, const chrono::duration<size_t, std::milli> = 0) throw(exception); void poll(map<rdkBaseSocket *, rdkOperations> &) throw(exception);}