1
0
mirror of synced 2025-04-20 11:47:43 +03:00
This commit is contained in:
yhirose 2020-05-04 22:13:17 -04:00
commit cf386f97fd
2 changed files with 38 additions and 0 deletions

View File

@ -1469,6 +1469,11 @@ socket_t create_socket(const char *host, int port, Fn fn,
int yes = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char *>(&yes),
sizeof(yes));
int no = 0;
setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast<char *>(&no),
sizeof(no));
#ifdef SO_REUSEPORT
setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast<char *>(&yes),
sizeof(yes));

View File

@ -724,6 +724,39 @@ TEST(RedirectToDifferentPort, Redirect) {
}
#endif
TEST(Server, BindDualStack) {
Server svr;
svr.Get("/1", [&](const Request & /*req*/, Response &res) {
res.set_content("Hello World!", "text/plain");
});
auto thread = std::thread([&]() { svr.listen("::", PORT); });
// Give GET time to get a few messages.
std::this_thread::sleep_for(std::chrono::seconds(1));
{
Client cli("127.0.0.1", PORT);
auto res = cli.Get("/1");
ASSERT_TRUE(res != nullptr);
EXPECT_EQ(200, res->status);
EXPECT_EQ(res->body, "Hello World!");
}
{
Client cli("::1", PORT);
auto res = cli.Get("/1");
ASSERT_TRUE(res != nullptr);
EXPECT_EQ(200, res->status);
EXPECT_EQ(res->body, "Hello World!");
}
svr.stop();
thread.join();
ASSERT_FALSE(svr.is_running());
}
TEST(Server, BindAndListenSeparately) {
Server svr;
int port = svr.bind_to_any_port("0.0.0.0");