Add get_socket_fd method to Client and ClientImpl, add according unit… (#1341)

* Add get_socket_fd method to Client and ClientImpl, add according unit test

* Change name get_socket_fd to get_socket

* Change name get_socket to socket

Co-authored-by: ata.yardimci <ata.yardimci@erstream.com>
This commit is contained in:
Rockybilly 2022-07-31 15:27:38 +03:00 committed by GitHub
parent 106be19c3e
commit 0b541ffebc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 0 deletions

View file

@ -992,6 +992,8 @@ public:
size_t is_socket_open() const; size_t is_socket_open() const;
socket_t socket() const;
void stop(); void stop();
void set_hostname_addr_map(std::map<std::string, std::string> addr_map); void set_hostname_addr_map(std::map<std::string, std::string> addr_map);
@ -1344,6 +1346,8 @@ public:
size_t is_socket_open() const; size_t is_socket_open() const;
socket_t socket() const;
void stop(); void stop();
void set_hostname_addr_map(std::map<std::string, std::string> addr_map); void set_hostname_addr_map(std::map<std::string, std::string> addr_map);
@ -6944,6 +6948,10 @@ inline size_t ClientImpl::is_socket_open() const {
return socket_.is_open(); return socket_.is_open();
} }
inline socket_t ClientImpl::socket() const {
return socket_.sock;
}
inline void ClientImpl::stop() { inline void ClientImpl::stop() {
std::lock_guard<std::mutex> guard(socket_mutex_); std::lock_guard<std::mutex> guard(socket_mutex_);
@ -8151,6 +8159,8 @@ inline Result Client::send(const Request &req) { return cli_->send(req); }
inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); } inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); }
inline socket_t Client::socket() const { return cli_->socket(); }
inline void Client::stop() { cli_->stop(); } inline void Client::stop() { cli_->stop(); }
inline void inline void

View file

@ -4750,6 +4750,43 @@ TEST(SendAPI, SimpleInterface_Online) {
EXPECT_EQ(301, res->status); EXPECT_EQ(301, res->status);
} }
TEST(ClientImplMethods, GetSocketTest) {
httplib::Server svr;
svr.Get( "/", [&](const httplib::Request& req, httplib::Response& res) {
res.status = 200;
});
auto thread = std::thread([&]() { svr.listen("127.0.0.1", 3333); });
while (!svr.is_running()) {
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
{
httplib::Client cli("http://127.0.0.1:3333");
cli.set_keep_alive(true);
// Use the behavior of cpp-httplib of opening the connection
// only when the first request happens. If that changes,
// this test would be obsolete.
EXPECT_EQ(cli.socket(), INVALID_SOCKET);
// This also implicitly tests the server. But other tests would fail much
// earlier than this one to be considered.
auto res = cli.Get("/");
ASSERT_TRUE(res);
EXPECT_EQ(200, res->status);
ASSERT_TRUE(cli.socket() != INVALID_SOCKET);
}
svr.stop();
thread.join();
ASSERT_FALSE(svr.is_running());
}
// Disabled due to out-of-memory problem on GitHub Actions // Disabled due to out-of-memory problem on GitHub Actions
#ifdef _WIN64 #ifdef _WIN64
TEST(ServerLargeContentTest, DISABLED_SendLargeContent) { TEST(ServerLargeContentTest, DISABLED_SendLargeContent) {