static void *Worker(void *arg) {
  struct WorkerData *worker_data = (struct WorkerData *) arg;
  NaClSrpcServerLoop(worker_data->sock_fd, worker_data->methods, NULL);
  close(worker_data->sock_fd);
  free(worker_data);
  return NULL;
}
예제 #2
0
void *RpcHandler(void *thread_state) {
  int desc = (int) thread_state;
  if (!NaClSrpcServerLoop(desc, table, NULL)) {
    fprintf(stderr, "NaClSrpcServerLoop failed\n");
    abort();
  }
  (void) close(desc);
  return (void *) NULL;
}
int NaClSimpleServiceConnectionServerLoop(
    struct NaClSimpleServiceConnection *self) {
  int retval;

  NaClLog(4,
          "NaClSimpleServiceConnectionServerLoop: handling RPC requests from"
          " client at socket %"NACL_PRIxPTR"\n",
          (uintptr_t) self->connected_socket);
  retval = NaClSrpcServerLoop(self->connected_socket,
                              self->server->handlers,
                              self->instance_data);
  NaClLog(4,
          "NaClSimpleServiceConnectionServerLoop: NaClSrpcServerLoop exited,"
          " value %d\n", retval);
  return retval;
}
예제 #4
0
int NaClSrpcAcceptClientConnection(const struct NaClSrpcHandlerDesc *methods) {
  int sock_fd = -1;
  int result = 1;

  if (NaClSrpcIsStandalone()) {
    return NaClSrpcCommandLoopMain(methods);
  }

  sock_fd = imc_accept(BOUND_SOCKET);
  if (sock_fd == -1) {
    return 0;
  }
  if (!NaClSrpcServerLoop(sock_fd, methods, NULL)) {
    result = 0;
  }
  if (close(sock_fd) != 0) {
    result = 0;
  }
  return result;
}
예제 #5
0
void WINAPI serviceThread(void* arg) {
  struct ServiceThreadArgs* typedArg;
  NaClSrpcImcDescType desc;
  NaClSrpcHandlerDesc handlers[] = {
    { "getNum::i", handleGetNum },
    { NULL, NULL }
  };
  typedArg = (struct ServiceThreadArgs*) arg;
  desc = typedArg->desc;
  free(typedArg);

  if (!NaClSrpcServerLoop(desc, handlers, 0)) {
    failWithErrno("NaClSrpcServerLoop");
    exit(EXIT_FAILURE);
  }
#ifdef __native_client__
  close(desc);
#else
  NaClDescUnref(desc);
#endif
  NaClThreadExit(0);
}
예제 #6
0
int NaClSrpcAcceptClientConnection(const struct NaClSrpcHandlerDesc *methods) {
  int sock_fd = -1;
  int result = 1;

  NaClSrpcLog(1, "NaClSrpcAcceptClientConnection(methods=%p)\n",
              (void*) methods);
  sock_fd = imc_accept(BOUND_SOCKET);
  if (sock_fd == -1) {
    NaClSrpcLog(NACL_SRPC_LOG_ERROR,
                "NaClSrpcAcceptClientConnection: imc_accept failed.\n");
    return 0;
  }
  if (!NaClSrpcServerLoop(sock_fd, methods, NULL)) {
    NaClSrpcLog(1,
                "NaClSrpcAcceptClientConnection: NaClSrpcServerLoop exited.\n");
    result = 0;
  }
  if (close(sock_fd) != 0) {
    NaClSrpcLog(NACL_SRPC_LOG_ERROR,
                "NaClSrpcAcceptClientConnection: close failed.\n");
    result = 0;
  }
  return result;
}