From 56ae875861ab260b80a030f50c4aff9f9dc8fff0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:32:39 +0200 Subject: Adding upstream version 2.14.2. Signed-off-by: Daniel Baumann --- lib/base/socket.hpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 lib/base/socket.hpp (limited to 'lib/base/socket.hpp') diff --git a/lib/base/socket.hpp b/lib/base/socket.hpp new file mode 100644 index 0000000..f7acf7f --- /dev/null +++ b/lib/base/socket.hpp @@ -0,0 +1,66 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef SOCKET_H +#define SOCKET_H + +#include "base/i2-base.hpp" +#include "base/object.hpp" +#include + +namespace icinga +{ + +/** + * Base class for connection-oriented sockets. + * + * @ingroup base + */ +class Socket : public Object +{ +public: + DECLARE_PTR_TYPEDEFS(Socket); + + Socket() = default; + Socket(SOCKET fd); + ~Socket() override; + + SOCKET GetFD() const; + + void Close(); + + std::pair GetClientAddressDetails(); + String GetClientAddress(); + std::pair GetPeerAddressDetails(); + String GetPeerAddress(); + + size_t Read(void *buffer, size_t size); + size_t Write(const void *buffer, size_t size); + + void Listen(); + Socket::Ptr Accept(); + + bool Poll(bool read, bool write, struct timeval *timeout = nullptr); + + void MakeNonBlocking(); + + static void SocketPair(SOCKET s[2]); + +protected: + void SetFD(SOCKET fd); + + int GetError() const; + + mutable std::mutex m_SocketMutex; + +private: + SOCKET m_FD{INVALID_SOCKET}; /**< The socket descriptor. */ + + static std::pair GetDetailsFromSockaddr(sockaddr *address, socklen_t len); + static String GetHumanReadableAddress(const std::pair& socketDetails); +}; + +class socket_error : virtual public std::exception, virtual public boost::exception { }; + +} + +#endif /* SOCKET_H */ -- cgit v1.2.3