SNode.C
Loading...
Searching...
No Matches
SocketContext.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef CORE_SOCKET_STREAM_SOCKETCONTEXT_H
21#define CORE_SOCKET_STREAM_SOCKETCONTEXT_H
22
23#include "core/socket/SocketContext.h"
24
25namespace core::pipe {
26 class Source;
27}
28
29namespace core::socket::stream {
30 class SocketConnection;
31
32} // namespace core::socket::stream
33
34#ifndef DOXYGEN_SHOULD_SKIP_THIS
35
36#include <cstddef>
37
38#endif /* DOXYGEN_SHOULD_SKIP_THIS */
39
40namespace core::socket::stream {
41
42 class SocketContext : public core::socket::SocketContext {
43 private:
44 using Super = core::socket::SocketContext;
45
46 public:
47 explicit SocketContext(core::socket::stream::SocketConnection* socketConnection);
48
49 using Super::sendToPeer;
50
51 void sendToPeer(const char* chunk, std::size_t chunkLen) const final;
52 bool streamToPeer(core::pipe::Source* source) const;
53 void streamEof();
54
55 std::size_t readFromPeer(char* chunk, std::size_t chunklen) const final;
56
57 void setTimeout(const utils::Timeval& timeout) final;
58
59 void shutdownRead();
60 void shutdownWrite(bool forceClose = false);
61 void close() override;
62
63 SocketConnection* getSocketConnection() const;
64 virtual void switchSocketContext(SocketContext* newSocketContext);
65
66 protected:
67 void onWriteError(int errnum) override;
68 void onReadError(int errnum) override;
69
70 private:
71 virtual void onConnected() = 0;
72 virtual void onDisconnected() = 0;
73
74 core::socket::stream::SocketConnection* socketConnection;
75
76 template <typename PhysicalSocketT, class SocketReaderT, class SocketWriterT>
77 friend class SocketConnectionT;
78 friend class SocketConnection;
79 };
80
81} // namespace core::socket::stream
82
83#endif // CORE_SOCKET_STREAM_SOCKETCONTEXT_H
int main(int argc, char *argv[])
#define QUOTE_INCLUDE(a)
Definition clients.h:25
#define STR(a)
Definition clients.h:26
EchoSocketClient getClient()
Definition clients.h:54
Definition clients.h:50
Definition Config.h:37