Program Listing for File BaseSocket.h¶
↰ Return to documentation for file (src/sockets/BaseSocket.h)
//
// Created by Aleksey Timin on 11/18/19.
//
#ifndef EIPSCANNER_SOCKETS_BASESOCKET_H
#define EIPSCANNER_SOCKETS_BASESOCKET_H
#include <vector>
#include <cstdint>
#include <string>
#include <chrono>
#include <functional>
#include <memory>
#include <system_error>
#include "EndPoint.h"
namespace eipScanner {
namespace sockets {
class BaseSocket {
public:
using BeginReceiveHandler = std::function<void(BaseSocket&)>;
using SPtr = std::shared_ptr<BaseSocket>;
using UPtr = std::unique_ptr<BaseSocket>;
explicit BaseSocket(EndPoint endPoint);
BaseSocket(std::string host, int port);
virtual ~BaseSocket();
virtual void Send(const std::vector<uint8_t>& data) const = 0;
virtual std::vector<uint8_t> Receive(size_t size) const = 0;
void setBeginReceiveHandler(BeginReceiveHandler handler);
const std::chrono::milliseconds &getRecvTimeout() const;
void setRecvTimeout(const std::chrono::milliseconds &recvTimeout);
int getSocketFd() const;
static int getLastError();
static const std::error_category& getErrorCategory() noexcept;
const EndPoint &getRemoteEndPoint() const;
static void select(std::vector<BaseSocket::SPtr> sockets, std::chrono::milliseconds timeout);
protected:
void BeginReceive();
void Shutdown();
void Close();
int _sockedFd;
EndPoint _remoteEndPoint;
std::chrono::milliseconds _recvTimeout;
BeginReceiveHandler _beginReceiveHandler;
static timeval makePortableInterval(const std::chrono::milliseconds &recvTimeout);
};
}
}
#endif // EIPSCANNER_SOCKETS_BASESOCKET_H