1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
/*
* SPDX-FileCopyrightText: 2019 Oleg Burchakov
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "pistache/endpoint.h"
#include <signal.h>
using namespace Pistache;
class HelloHandler : public Http::Handler
{
public:
HTTP_PROTOTYPE(HelloHandler)
void onRequest(const Http::Request& /*request*/, Http::ResponseWriter response) override
{
response.send(Pistache::Http::Code::Ok, "Hello World\n");
}
};
int main()
{
sigset_t signals;
if (sigemptyset(&signals) != 0
|| sigaddset(&signals, SIGTERM) != 0
|| sigaddset(&signals, SIGINT) != 0
|| sigaddset(&signals, SIGHUP) != 0
|| pthread_sigmask(SIG_BLOCK, &signals, nullptr) != 0)
{
perror("install signal handler failed");
return 1;
}
Pistache::Address addr(Pistache::Ipv4::any(), Pistache::Port(9080));
auto opts = Pistache::Http::Endpoint::options()
.threads(1);
Http::Endpoint server(addr);
server.init(opts);
server.setHandler(Http::make_handler<HelloHandler>());
server.serveThreaded();
int signal = 0;
int status = sigwait(&signals, &signal);
if (status == 0)
{
std::cout << "received signal " << signal << std::endl;
}
else
{
std::cerr << "sigwait returns " << status << std::endl;
}
server.shutdown();
}
|