Browse Source

refactor(mge/zmqrpc): zmqrpc return real port or -1

GitOrigin-RevId: 878b63c601
tags/v0.4.0
Megvii Engine Team Xinran Xu 5 years ago
parent
commit
f18259d73a
1 changed files with 13 additions and 12 deletions
  1. +13
    -12
      python_module/src/cpp/zmq_rpc.cpp

+ 13
- 12
python_module/src/cpp/zmq_rpc.cpp View File

@@ -101,30 +101,31 @@ ZmqRpcServer::ZmqRpcServer(string address, int port,
m_backend(m_ctx, ZMQ_ROUTER),
m_workers(&m_ctx, m_impl.get()) {
try {
char full_addr[30];
char full_addr[100];
size_t size = sizeof(full_addr);
sprintf(full_addr, "%s:%d", m_address.c_str(), m_port);
m_frontend.bind(full_addr);
} catch (...) {
char full_addr[30];
for (int i = 1024; i < 49151; i++) {
m_port = 0;
try {
sprintf(full_addr, "%s:%d", m_address.c_str(), i);
m_frontend.bind(full_addr);
m_port = i;
break;
} catch (...) {
}
m_frontend.getsockopt(ZMQ_LAST_ENDPOINT, &full_addr, &size);
m_port = 0;
int pow = 1, len = strlen(full_addr);
for (int i = len - 1; i >= 0; i--) {
if (full_addr[i] == ':') break;
m_port += (full_addr[i] - '0') * pow;
pow *= 10;
}
} catch(...) {
m_port = -1;
}
m_backend.bind("inproc://workers");
}

void ZmqRpcServer::run() {
if(m_port == -1) return;
m_main_thread = make_unique<thread>([this] { this->work(); });
}

void ZmqRpcServer::close() {
if(m_port == -1) return;
m_stop = true;
if (m_main_thread->joinable())
m_main_thread->join();


Loading…
Cancel
Save