---
name: "RpcPeer"
section: "3"
platform: "linux"
package: "ivtools-dev"
version: "1.1.3-4"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/RpcPeer"
---

# RpcPeer(3)

support bi-directional RPC between two services

## NAME

RpcPeer - support bi-directional RPC between two services

## SYNOPSIS

**#include \<Dispatch/rpcpeer.h\>**

## DESCRIPTION

An RpcPeer (actually, an instance of a derived class) tries to open a connection to another RpcPeer.  If the other RpcPeer is not yet running, the RpcPeer will create its own port and wait for the other RpcPeer to open a connection.  When either RpcPeer opens a connection, each RpcPeer will create both a reader and a writer so each RpcPeer can send RPC requests to its opposite over the same connection.

## CONSTRUCTOR

- **RpcPeer(const char\* lPath, int lPort = 0)**

  Store the arguments for later use since a base constructor can't call a derived class's virtual function.  The derived class's constructor should call \`\`init'', described below.

- **void init(const char\* rPath)**

  Find the host name and port number registered by the other RpcPeer and try to open a connection to it.  If it's not running, create our own port and wait for the other RpcPeer to open a connection.

## PUBLIC OPERATIONS

- **void run()**

  - **void quitRunning()**

  Read RPC requests continuously until \`\`quitRunning()'' terminates the loop.  If you're using InterViews, you don't have to call \`\`run()'' since the InterViews event-reading code will also read RPC requests.

## PROTECTED OPERATIONS

- **virtual boolean createReaderAndWriter(const char\* rHost, int rPort) = 0**

  - **virtual void createReaderAndWriter(int fd) = 0**

  You must define both functions in a derived class in order to start reading and writing RPC requests over the connection.  Typically both functions would create a writer using the given parameters and then attach a reader to the writer's rpcstream.

## SEE ALSO

Dispatcher(3I), RpcReader(3I), RpcRegistry(3I), RpcWriter(3I)
