10Duke Scale C++ Client
Loading...
Searching...
No Matches
AbstractBaseSocket.h
1#ifndef TENDUKE_OSA_ABSTRACTBASESOCKET_H
2#define TENDUKE_OSA_ABSTRACTBASESOCKET_H
3
4#include "osa/Socket.h"
5
6#include <cstdint>
7#include <memory>
8#include <string>
9
10#if defined(__APPLE__) || defined(__linux__) || defined(__unix__) || defined(_POSIX_VERSION) || defined(__ANDROID__)
11
12#include <arpa/inet.h>
13#include <sys/socket.h>
14
15#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined (_WIN64)
16
17#include <WinSock2.h>
18
19#endif // OS-detection
20
21
22namespace tenduke { namespace osa {
23
24
25
30{
31public:
36 explicit SocketDescriptor(int descriptor);
37 virtual ~SocketDescriptor();
38
43 int get() const {return descriptor;}
44private:
45 int descriptor;
46};
47
52{
53public:
58 AbstractBaseSocket(uint32_t address, uint16_t port);
59
63 std::unique_ptr<tenduke::osa::Socket> accept(uint32_t timeoutMs) override;
65
69 void listen() override;
70
74 int read(void * buffer, std::size_t bufferSize) override;
75
79 int write(const void * buffer, std::size_t len) override;
80
81protected:
87 AbstractBaseSocket(int descriptor, const struct ::sockaddr_in *address);
88
95 virtual std::unique_ptr<tenduke::osa::Socket> createSocket(int descriptor, const struct ::sockaddr_in *address) = 0;
96
101 virtual int getLastError() const = 0;
102
108 virtual std::string mkErrorMessage(const std::string &body) const;
109
115 virtual std::string mkErrorMessage(const char *body) const;
116
123 virtual std::string mkErrorMessage(const std::string &body, int errorCode) const = 0;
124
130 virtual bool wouldBlock(int errorCode) const = 0;
131
134
135private:
136 struct ::sockaddr_in address;
137};
138
139}}
140
141#endif //TENDUKE_OSA_ABSTRACTBASESOCKET_H
Abstract base implementation of tenduke::osa::Socket.
Definition AbstractBaseSocket.h:52
void listen() override
Configures the socket to listen for incoming connections.
Definition AbstractBaseSocket.cpp:89
virtual bool wouldBlock(int errorCode) const =0
Checks if error code means that call would have blocked.
virtual int getLastError() const =0
Returns last error code.
virtual std::unique_ptr< tenduke::osa::Socket > createSocket(int descriptor, const struct ::sockaddr_in *address)=0
Creates a socket.
AbstractBaseSocket(int descriptor, const struct ::sockaddr_in *address)
Constructs new instance.
int read(void *buffer, std::size_t bufferSize) override
Reads bytes from the socket.number of bytes read. Returns -1, if socket is non-blocking and nothing t...
Definition AbstractBaseSocket.cpp:97
SocketDescriptor descriptor
The socket descriptor.
Definition AbstractBaseSocket.h:133
int write(const void *buffer, std::size_t len) override
Write bytes to the socket.number of bytes written
Definition AbstractBaseSocket.cpp:115
virtual std::string mkErrorMessage(const std::string &body, int errorCode) const =0
Builds error message.
virtual std::string mkErrorMessage(const std::string &body) const
Builds error message.
Definition AbstractBaseSocket.cpp:138
Wraps the socket descriptor for RAII.
Definition AbstractBaseSocket.h:30
int get() const
Returns the descriptor.
Definition AbstractBaseSocket.h:43
OS-independent abstraction of a socket.
Definition Socket.h:14
virtual std::unique_ptr< Socket > accept()=0
Accepts next connection from listening socket.
Root for classes, functions and globals of 10Duke C++ Client.
Definition BackendConfiguration.h:7