Interface providing access to interprocess-communication (IPC) functionality.
More...
|
virtual | ~Ipc ()=default |
|
virtual std::unique_ptr< Init > | spawnProcess (const char *exe_name)=0 |
| Spawn a child process returning pointer to its Init interface. More...
|
|
virtual bool | startSpawnedProcess (int argc, char *argv[], int &exit_status)=0 |
| If this is a spawned process, block and handle requests from the parent process by forwarding them to this process's Init interface, then return true. More...
|
|
virtual std::unique_ptr< Init > | connectAddress (std::string &address)=0 |
| Connect to a socket address and make a client interface proxy object using provided callback. More...
|
|
virtual void | listenAddress (std::string &address)=0 |
| Connect to a socket address and make a client interface proxy object using provided callback. More...
|
|
template<typename Interface > |
void | addCleanup (Interface &iface, std::function< void()> cleanup) |
| Add cleanup callback to remote interface that will run when the interface is deleted. More...
|
|
virtual ipc::Context & | context ()=0 |
| IPC context struct accessor (see struct definition for more description). More...
|
|
Interface providing access to interprocess-communication (IPC) functionality.
The IPC implementation is responsible for establishing connections between a controlling process and a process being controlled. When a connection is established, the process being controlled returns an interfaces::Init pointer to the controlling process, which the controlling process can use to get access to other interfaces and functionality.
When spawning a new process, the steps are:
- The controlling process calls interfaces::Ipc::spawnProcess(), which calls ipc::Process::spawn(), which spawns a new process and returns a socketpair file descriptor for communicating with it. interfaces::Ipc::spawnProcess() then calls ipc::Protocol::connect() passing the socketpair descriptor, which returns a local proxy interfaces::Init implementation calling remote interfaces::Init methods.
- The spawned process calls interfaces::Ipc::startSpawnProcess(), which calls ipc::Process::checkSpawned() to read command line arguments and determine whether it is a spawned process and what socketpair file descriptor it should use. It then calls ipc::Protocol::serve() to handle incoming requests from the socketpair and invoke interfaces::Init interface methods, and exit when the socket is closed.
- The controlling process calls local proxy interfaces::Init object methods to make other proxy objects calling other remote interfaces. It can also destroy the initial interfaces::Init object to close the connection and shut down the spawned process.
When connecting to an existing process, the steps are similar to spawning a new process, except a socket is created instead of a socketpair, and destroying an Init interface doesn't end the process, since there can be multiple connections.
Definition at line 49 of file ipc.h.