mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 17:26:48 +08:00
adjust interface for connect
This commit is contained in:
parent
40711e0ced
commit
ca6815c601
@ -15,7 +15,7 @@ using buff_t = buffer;
|
||||
|
||||
template <typename Flag>
|
||||
struct IPC_EXPORT chan_impl {
|
||||
static handle_t connect (char const * name);
|
||||
static handle_t connect (char const * name, bool start);
|
||||
static void disconnect(handle_t h);
|
||||
|
||||
static std::size_t recv_count(handle_t h);
|
||||
@ -39,8 +39,8 @@ private:
|
||||
public:
|
||||
chan_wrapper() = default;
|
||||
|
||||
explicit chan_wrapper(char const * name) {
|
||||
this->connect(name);
|
||||
explicit chan_wrapper(char const * name, bool start = false) {
|
||||
this->connect(name, start);
|
||||
}
|
||||
|
||||
chan_wrapper(chan_wrapper&& rhs) {
|
||||
@ -77,10 +77,10 @@ public:
|
||||
return chan_wrapper { name() };
|
||||
}
|
||||
|
||||
bool connect(char const * name) {
|
||||
bool connect(char const * name, bool start = true) {
|
||||
if (name == nullptr || name[0] == '\0') return false;
|
||||
this->disconnect();
|
||||
h_ = detail_t::connect((n_ = name).c_str());
|
||||
h_ = detail_t::connect((n_ = name).c_str(), start);
|
||||
return valid();
|
||||
}
|
||||
|
||||
|
||||
18
src/ipc.cpp
18
src/ipc.cpp
@ -157,8 +157,18 @@ static auto& recv_cache() {
|
||||
|
||||
/* API implementations */
|
||||
|
||||
static ipc::handle_t connect(char const * name) {
|
||||
return mem::alloc<conn_info_t>(name);
|
||||
static ipc::handle_t connect(char const * name, bool start) {
|
||||
auto h = mem::alloc<conn_info_t>(name);
|
||||
auto que = queue_of(h);
|
||||
if (que == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (start) {
|
||||
if (que->connect()) { // wouldn't connect twice
|
||||
info_of(h)->cc_waiter_.broadcast();
|
||||
}
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
static void disconnect(ipc::handle_t h) {
|
||||
@ -336,8 +346,8 @@ using policy_t = policy::choose<circ::elem_array, Flag>;
|
||||
namespace ipc {
|
||||
|
||||
template <typename Flag>
|
||||
ipc::handle_t chan_impl<Flag>::connect(char const * name) {
|
||||
return detail_impl<policy_t<Flag>>::connect(name);
|
||||
ipc::handle_t chan_impl<Flag>::connect(char const * name, bool start) {
|
||||
return detail_impl<policy_t<Flag>>::connect(name, start);
|
||||
}
|
||||
|
||||
template <typename Flag>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user