int ipc_inst_start(void) { int connfd; ipc_message msg; int ret; connfd = prepare_ipc(); if (connfd < 0) return -1; memset(&msg, 0, sizeof(msg)); msg.magic = IPC_MAGIC; msg.type = REQ_INSTALL; ret = write(connfd, &msg, sizeof(msg)); if (ret != sizeof(msg)) { close(connfd); return -1; } ret = read(connfd, &msg, sizeof(msg)); if (ret <= 0) { TRACE("No answer from server"); close(connfd); return -1; } if (msg.type != ACK) { TRACE("Installation not accepted %s", msg.data.msg); close(connfd); return -1; } return connfd; }
int ipc_get_status(ipc_message *msg) { int ret; int connfd; connfd = prepare_ipc(); if (connfd < 0) { return -1; } memset(msg, 0, sizeof(*msg)); msg->magic = IPC_MAGIC; msg->type = GET_STATUS; ret = write(connfd, msg, sizeof(*msg)); if (ret != sizeof(*msg)) { TRACE("IPC Error"); close(connfd); return -1; } ret = read(connfd, msg, sizeof(*msg)); if (ret <= 0) { TRACE("No answer from server"); close(connfd); return -1; } close(connfd); return 0; }
void mainloop(void) { extern int game_is_being_shut_down; struct task *current_task; struct timeval tv; double task_start; #ifdef SUPER_SNOOP read_snoop_file(); #endif (void) printf("Setting up ipc.\n"); (void)fflush(stdout); prepare_ipc(); (void) signal(SIGFPE, sigfpe_handler); while (!game_is_being_shut_down) { while (task_head.next == &task_head) { set_current_time(); deliver_signals(); call_out(&tv); if (task_head.next != &task_head) tv.tv_sec = tv.tv_usec = 0; nd_select(&tv); check_for_slow_shut_down(); } set_current_time(); current_task = task_head.next; remove_task(current_task); runtask(current_task); task_start = current_time; set_current_time(); update_runq_av((num_tasks + 1.0) * (current_time - task_start)); /* process callouts and IO */ deliver_signals(); if (task_head.next != &task_head || current_task->next == current_task) { tv.tv_sec = tv.tv_usec = 0; call_out(NULL); } else call_out(&tv); if (task_head.next != &task_head || current_task->next == current_task) tv.tv_sec = tv.tv_usec = 0; nd_select(&tv); check_for_slow_shut_down(); if (current_task->next == current_task) append_task(current_task); /* reschedule the task */ else free(current_task); } shutdowngame(); }