Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
ConnectionPool.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <vector>
4#include <unordered_map>
5#include <mutex>
6#include <memory>
7#include <chrono>
8
9namespace network {
10
12 int fd{-1};
13 void* ssl{nullptr};
14 std::chrono::steady_clock::time_point last_used;
15};
16
18public:
20 static ConnectionPool instance;
21 return instance;
22 }
23
24 // Gets a connection immediately if available, returning pair {fd, ssl_ptr}
25 std::pair<int, void*> acquire(const std::string& host, int port);
26
27 // Returns a connection back to the pool
28 void release(const std::string& host, int port, int fd, void* ssl = nullptr);
29
30 // Removes closed or stale connections
32
33private:
34 ConnectionPool() = default;
35
36 std::mutex mutex_;
37 // Key: "host:port"
38 std::unordered_map<std::string, std::vector<PooledConnection>> pool_;
39};
40
41} // namespace network
Definition ConnectionPool.hpp:17
void release(const std::string &host, int port, int fd, void *ssl=nullptr)
Definition ConnectionPool.cpp:50
void cleanup_stale_connections()
Definition ConnectionPool.cpp:64
std::pair< int, void * > acquire(const std::string &host, int port)
Definition ConnectionPool.cpp:16
static ConnectionPool & get_instance()
Definition ConnectionPool.hpp:19
Definition ResponseWriter.hpp:7
Definition ConnectionPool.hpp:11
std::chrono::steady_clock::time_point last_used
Definition ConnectionPool.hpp:14
void * ssl
Definition ConnectionPool.hpp:13
int fd
Definition ConnectionPool.hpp:12