Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
CStreamSocket.hpp
Go to the documentation of this file.
1#ifndef LIBS_COMM_CSTREAMSOCKET_HPP_
2#define LIBS_COMM_CSTREAMSOCKET_HPP_
3
4#include "CSocket.hpp"
5
6#include <vector>
7
8class CStreamSocket : public CSocket
9{
10public:
11 static constexpr int32_t COMM_TYPE = SOCK_STREAM;
12
13 CStreamSocket() = default;
14
15 explicit CStreamSocket(socket_t handle) : CSocket(handle)
16 {
17 }
18
19 CStreamSocket(CStreamSocket &&sock) noexcept : CSocket(std::move(sock))
20 {
21 }
22
23 static CStreamSocket create(int32_t domain, int32_t protocol = 0);
24
26 {
27 CSocket::operator=(std::move(rhs));
28
29 return *this;
30 }
31
32 ssize_t read(const std::vector<iovec> &ranges);
33 virtual ssize_t read(void *buf, size_t n);
34 virtual ssize_t read_n(void *buf, size_t n);
35
36 virtual ssize_t write(const std::string &s)
37 {
38 return write_n(s.data(), s.size());
39 }
40
41 virtual ssize_t write(const std::vector<iovec> &ranges);
42 virtual ssize_t write(const void *buf, size_t n);
43 virtual ssize_t write_n(const void *buf, size_t n);
44
45 virtual bool setReadTimeout(const std::chrono::microseconds &to);
46
47 template<class Rep, class Period>
48 bool setReadTimeout(const std::chrono::duration<Rep, Period> &to)
49 {
50 return setReadTimeout(std::chrono::duration_cast<std::chrono::microseconds>(to));
51 }
52
53 virtual bool setWriteTimeout(const std::chrono::microseconds &to);
54
55 template<class Rep, class Period>
56 bool write_timeout(const std::chrono::duration<Rep, Period> &to)
57 {
58 return setWriteTimeout(std::chrono::duration_cast<std::chrono::microseconds>(to));
59 }
60
61protected:
62 friend class CAcceptorSocket;
63
64 static socket_t createHandle(int32_t domain)
65 {
66 return (socket_t)::socket(domain, COMM_TYPE, 0);
67 }
68};
69
70//---------------------------------------------------------------
71
72template<typename ADDR>
74{
75public:
76 static constexpr sa_family_t ADDRESS_FAMILY = ADDR::ADDRESS_FAMILY;
77 using addr_t = ADDR;
78
79 CStreamSocketTmpl() = default;
80
81 explicit CStreamSocketTmpl(socket_t handle) : CStreamSocket(handle)
82 {
83 }
84
85 explicit CStreamSocketTmpl(CStreamSocket &&sock) : CStreamSocket(std::move(sock))
86 {
87 }
88
89 CStreamSocketTmpl(CStreamSocketTmpl &&sock) noexcept : CStreamSocket(std::move(sock))
90 {
91 }
92
94 {
95 CStreamSocket::operator=(std::move(rhs));
96
97 return *this;
98 }
99
100 CStreamSocketTmpl create(int32_t protocol = 0)
101 {
102 return CStreamSocketTmpl(std::move(CStreamSocket::create(ADDRESS_FAMILY, protocol)));
103 }
104
105 static std::tuple<CStreamSocketTmpl, CStreamSocketTmpl> pair(int32_t protocol = 0)
106 {
107 auto pr = CStreamSocket::pair(ADDRESS_FAMILY, COMM_TYPE, protocol);
108
109 return std::make_tuple<CStreamSocketTmpl, CStreamSocketTmpl>(CStreamSocketTmpl {std::get<0>(pr).release()},
110 CStreamSocketTmpl {std::get<1>(pr).release()});
111 }
112
114 {
115 return addr_t(CSocket::getAddress());
116 }
117
119 {
121 }
122};
123
124#endif /* LIBS_COMM_CSTREAMSOCKET_HPP_ */
int32_t socket_t
Definition ENetPort.hpp:13
Definition CAcceptorSocket.hpp:7
Clase que representa un socket de comunicación. Se usa como base para la genereación de clases de com...
Definition CSocket.hpp:19
virtual CSocketAddressAny getPeerAddress() const
Definition CSocket.cpp:152
CSocket()
Constructor por defecto. Inicializa el socket con el valor INVALID_SOCKET y el error a 0.
Definition CSocket.cpp:6
static std::tuple< CSocket, CSocket > pair(int32_t domain, int32_t type, int32_t protocol=0)
Definition CSocket.cpp:116
CSocket & operator=(const CSocket &other)=delete
Operador de asignación de copia, eliminado para evitar su uso.
virtual CSocketAddressAny getAddress() const
Definition CSocket.cpp:139
Definition CStreamSocket.hpp:74
CStreamSocketTmpl()=default
CStreamSocketTmpl(socket_t handle)
Definition CStreamSocket.hpp:81
CStreamSocketTmpl(CStreamSocketTmpl &&sock) noexcept
Definition CStreamSocket.hpp:89
static constexpr sa_family_t ADDRESS_FAMILY
Definition CStreamSocket.hpp:76
addr_t getAddr() const
Definition CStreamSocket.hpp:113
ADDR addr_t
Definition CStreamSocket.hpp:77
CStreamSocketTmpl(CStreamSocket &&sock)
Definition CStreamSocket.hpp:85
CStreamSocketTmpl create(int32_t protocol=0)
Definition CStreamSocket.hpp:100
CStreamSocketTmpl & operator=(CStreamSocketTmpl &&rhs) noexcept
Definition CStreamSocket.hpp:93
static std::tuple< CStreamSocketTmpl, CStreamSocketTmpl > pair(int32_t protocol=0)
Definition CStreamSocket.hpp:105
addr_t getPeerAddr() const
Definition CStreamSocket.hpp:118
Definition CStreamSocket.hpp:9
CStreamSocket(CStreamSocket &&sock) noexcept
Definition CStreamSocket.hpp:19
CStreamSocket & operator=(CStreamSocket &&rhs) noexcept
Definition CStreamSocket.hpp:25
bool setReadTimeout(const std::chrono::duration< Rep, Period > &to)
Definition CStreamSocket.hpp:48
virtual ssize_t write_n(const void *buf, size_t n)
Definition CStreamSocket.cpp:69
static socket_t createHandle(int32_t domain)
Definition CStreamSocket.hpp:64
bool write_timeout(const std::chrono::duration< Rep, Period > &to)
Definition CStreamSocket.hpp:56
virtual ssize_t read_n(void *buf, size_t n)
Definition CStreamSocket.cpp:30
virtual bool setReadTimeout(const std::chrono::microseconds &to)
Definition CStreamSocket.cpp:94
static CStreamSocket create(int32_t domain, int32_t protocol=0)
Definition CStreamSocket.cpp:3
virtual ssize_t write(const std::string &s)
Definition CStreamSocket.hpp:36
static constexpr int32_t COMM_TYPE
Definition CStreamSocket.hpp:11
CStreamSocket()=default
CStreamSocket(socket_t handle)
Definition CStreamSocket.hpp:15
ssize_t read(const std::vector< iovec > &ranges)
Definition CStreamSocket.cpp:15
virtual bool setWriteTimeout(const std::chrono::microseconds &to)
Definition CStreamSocket.cpp:101