1 #pragma once
2 
3 #include <functional>
4 #include <sdeventplus/source/base.hpp>
5 #include <sys/signalfd.h>
6 
7 namespace sdeventplus
8 {
9 namespace source
10 {
11 
12 class Signal : public Base
13 {
14   public:
15     using Callback =
16         std::function<void(Signal& source, const struct signalfd_siginfo* si)>;
17 
18     Signal(const Event& event, int sig, Callback&& callback);
19 
20     int get_signal() const;
21 
22   private:
23     Callback callback;
24 
25     const Callback& get_callback() const;
26 
27     static sd_event_source* create_source(const Event& event, int sig);
28 
29     static int signalCallback(sd_event_source* source,
30                               const struct signalfd_siginfo* si,
31                               void* userdata);
32 };
33 
34 } // namespace source
35 } // namespace sdeventplus
36