int cl_ctx_loop(cl_context *ctx) { fd_set rset; if (ctx == NULL) { return CL_RET_NO_CONTEXT; } FD_ZERO(&rset); for (;;) { #ifndef _WIN32 FD_SET(0, &rset); /* just here, to be modified if application * listens on other fds */ #endif if (cl_select(0, &rset, NULL, NULL, NULL) < 0) { if (errno == EINTR) { continue; } else { I3_PRINT_DEBUG0(I3_DEBUG_LEVEL_FATAL, "select_error\n"); } } } return errno; }
int main_loop(t_cl_prop *cl) { while(1) { //printf("main_loop.\n"); printf("===============================================================\n"); init_fds(cl); cl_select(cl); check_fds(cl); } return (1); }
int cl_wait_cmd(const struct cl_cmd_t *cl_cmd, long sec, long usec, int *err) { struct cl_line l; int i; *err = CL_ERR_SUCCESS; if (cl_select(sec, usec, err) < 0) return -1; memset(&l, 0, sizeof(struct cl_line)); if (cl_read(&l, err) < 0) return -1; if (0 != strcasecmp(l.mode, "CMD")) { *err = CL_ERR_SYNTAX; cl_log(CL_LOG_ERR, CL_ERR_SYNTAX); return -1; } for (i = 0; i < CL_CMD_MAX; i++) { if (NULL == cl_cmd[i].name) break; if (0 == strcasecmp(l.key, cl_cmd[i].name)) { if (cl_cmd[i].handler(l.val, err) < 0) { cl_log(CL_LOG_ERR, *err); return -1; } if (CL_ERR_SUCCESS == *err) cl_log(CL_LOG_INFO, CL_ERR_SUCCESS); else cl_log(CL_LOG_ERR, *err); return 0; } } cl_log(CL_LOG_ERR, CL_ERR_UNKCMD); return -1; }