Program Listing for File EventSignalHandle.cpp
↰ Return to documentation for file (EventLoop/EventSignalHandle.cpp
)
#include "netio3-backend/EventLoop/EventSignalHandle.hpp"
#include <cstdint>
#include <memory>
#include <unistd.h>
#include "netio3-backend/EventLoop/BaseEventLoop.hpp"
#include "netio3-backend/EventLoop/Utility.hpp"
netio3::EventSignalHandle::EventSignalHandle(const int fd,
const std::shared_ptr<BaseEventLoop>& evloop) :
m_fd{std::make_shared<int>(fd)}, m_evloop{evloop}
{}
netio3::EventSignalHandle::~EventSignalHandle()
{
if (m_fd.use_count() > 1) {
return;
}
if (auto spt = m_evloop.lock()) {
spt->remove_signal(*this);
}
}
void netio3::EventSignalHandle::fire() const
{
const auto buf = std::uint64_t{1};
const auto ret = write(*m_fd, &buf, sizeof(buf));
constexpr static auto NBYTES = 8;
if (ret != NBYTES) {
ers::error(FailedFireSignal(ERS_HERE, *m_fd, ret, utility::error_message(errno)));
}
}