mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#pragma once
|
|
|
|
#include "zeek/Pipe.h"
|
|
|
|
namespace zeek::detail {
|
|
|
|
class Flare {
|
|
public:
|
|
|
|
/**
|
|
* Create a flare object that can be used to signal a "ready" status via
|
|
* a file descriptor that may be integrated with select(), poll(), etc.
|
|
* Not thread-safe, but that should only require Fire()/Extinguish() calls
|
|
* to be made mutually exclusive (across all copies of a Flare).
|
|
*/
|
|
Flare();
|
|
|
|
/**
|
|
* @return a file descriptor that will become ready if the flare has been
|
|
* Fire()'d and not yet Extinguished()'d.
|
|
*/
|
|
int FD() const { return pipe.ReadFD(); }
|
|
|
|
/**
|
|
* Put the object in the "ready" state.
|
|
* @param signal_safe whether to skip error-reporting functionality that
|
|
* is not async-signal-safe (errors still abort the process regardless)
|
|
*/
|
|
void Fire(bool signal_safe = false);
|
|
|
|
/**
|
|
* Take the object out of the "ready" state.
|
|
* @param signal_safe whether to skip error-reporting functionality that
|
|
* is not async-signal-safe (errors still abort the process regardless)
|
|
* @return number of bytes read from the pipe, corresponds to the number
|
|
* of times Fire() was called.
|
|
*/
|
|
int Extinguish(bool signal_safe = false);
|
|
|
|
private:
|
|
Pipe pipe;
|
|
};
|
|
|
|
} // namespace zeek::detail
|