#include "marshall.h"
#include "marshall_wrap.h"
#include "connection.h"
+#include "threaded_log.h"
using std::chrono::milliseconds;
std::mutex m_; // protect insert/delete to calls[]
std::mutex chan_m_;
+ std::mutex bind_m_; // protect bind operations
bool destroy_wait_ = false;
cond destroy_wait_c_;
int bind(milliseconds to = rpc::to_max);
+ // Manages a cache of RPC connections. Usage:
+ // if (auto cl = rpcc::bind_cached(dst))
+ // ret = cl->call(...);
+ // where the string dst has the form "host:port". Because bind_cached()
+ // may block, callers should probably not hold mutexes.
+ static shared_ptr<rpcc> bind_cached(const string & destination);
+ static void unbind_cached(const string & destination);
+
void set_reachable(bool r) { reachable_ = r; }
- void cancel();
+ void cancel(lock & m_lock);
template<class P, class R, typename ...Args>
inline int call(proc_t<P> proc, R & r, const Args & ... args) {