mirror of
https://github.com/zeek/zeek.git
synced 2025-10-13 03:58:20 +00:00
Address supervisor code re-factoring feedback from Robin
This commit is contained in:
parent
172456fac0
commit
718879735e
11 changed files with 425 additions and 293 deletions
40
src/Pipe.h
40
src/Pipe.h
|
@ -66,32 +66,72 @@ private:
|
|||
int status_flags[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* A pair of pipes that can be used for bi-directinoal IPC.
|
||||
*/
|
||||
class PipePair {
|
||||
public:
|
||||
|
||||
/**
|
||||
* Create a pair of pipes
|
||||
* @param flags file descriptor flags to set on pipes
|
||||
* @status_flags descriptor status flags to set on pipes
|
||||
* @fds may be supplied to open existing file descriptors rather
|
||||
* than create ones from a new pair of pipes. Should point to memory
|
||||
* containing four consecutive file descriptors, "read" end and "write" end
|
||||
* of the first pipe followed by the "read" end and "write" end of the
|
||||
* second pipe.
|
||||
*/
|
||||
PipePair(int flags, int status_flags, int* fds = nullptr);
|
||||
|
||||
/**
|
||||
* @return the pipe used for receiving input
|
||||
*/
|
||||
Pipe& In()
|
||||
{ return pipes[swapped]; }
|
||||
|
||||
/**
|
||||
* @return the pipe used for sending output
|
||||
*/
|
||||
Pipe& Out()
|
||||
{ return pipes[!swapped]; }
|
||||
|
||||
/**
|
||||
* @return the pipe used for receiving input
|
||||
*/
|
||||
const Pipe& In() const
|
||||
{ return pipes[swapped]; }
|
||||
|
||||
/**
|
||||
* @return the pipe used for sending output
|
||||
*/
|
||||
const Pipe& Out() const
|
||||
{ return pipes[!swapped]; }
|
||||
|
||||
/**
|
||||
* @return a file descriptor that may used for receiving messages by
|
||||
* polling/reading it.
|
||||
*/
|
||||
int InFD() const
|
||||
{ return In().ReadFD(); }
|
||||
|
||||
/**
|
||||
* @return a file descriptor that may be used for sending messages by
|
||||
* writing to it.
|
||||
*/
|
||||
int OutFD() const
|
||||
{ return Out().WriteFD(); }
|
||||
|
||||
/**
|
||||
* Swaps the meaning of the pipes in the pair. E.g. call this after
|
||||
* fork()'ing so that the child process uses the right pipe for
|
||||
* reading/writing.
|
||||
*/
|
||||
void Swap()
|
||||
{ swapped = ! swapped; }
|
||||
|
||||
private:
|
||||
|
||||
Pipe pipes[2];
|
||||
bool swapped = false;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue