static int worker( const char *path) { int sd, ret; char response[128]; /*set_loadctl_defaults();*/ sd = nsock_unix( path, NSOCK_TCP | NSOCK_CONNECT); if( sd < 0) { printf( "Failed to connect to query socket '%s': %s: %s\n", path, nsock_strerror( sd), strerror( errno)); return 1; } ret = nsock_printf_nul( sd, "@wproc register name=Core Ping Worker %d;pid=%d;plugin=check_ping", getpid(), getpid()); if( ret < 0) { printf( "Failed to register as worker.\n"); return 1; } ret = read( sd, response, 3); if( ret != 3) { printf( "Failed to read response from wproc manager\n"); return 1; } if( memcmp( response, "OK", 3)) { read( sd, response + 3, sizeof(response) - 4); response[ sizeof( response) - 2] = 0; printf( "Failed to register with wproc manager: %s\n", response); return 1; } enter_worker( sd, start_cmd); return 0; }
int qh_init(const char *path) { int result, old_umask; if (qh_listen_sock >= 0) iobroker_close(nagios_iobs, qh_listen_sock); if (!path) { nm_log(NSLOG_RUNTIME_ERROR, "qh: query_socket is NULL. What voodoo is this?\n"); return ERROR; } old_umask = umask(0117); errno = 0; qh_listen_sock = nsock_unix(path, NSOCK_TCP | NSOCK_UNLINK); umask(old_umask); if (qh_listen_sock < 0) { nm_log(NSLOG_RUNTIME_ERROR, "qh: Failed to init socket '%s'. %s: %s\n", path, nsock_strerror(qh_listen_sock), strerror(errno)); return ERROR; } /* plugins shouldn't have this socket */ (void)fcntl(qh_listen_sock, F_SETFD, FD_CLOEXEC); /* most likely overkill, but it's small, so... */ qh_table = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify) qh_remove); errno = 0; result = iobroker_register(nagios_iobs, qh_listen_sock, NULL, qh_registration_input); if (result < 0) { g_hash_table_destroy(qh_table); close(qh_listen_sock); nm_log(NSLOG_RUNTIME_ERROR, "qh: Failed to register socket with io broker: %s\n", iobroker_strerror(result)); return ERROR; } nm_log(NSLOG_INFO_MESSAGE, "qh: Socket '%s' successfully initialized\n", path); /* now register our the in-core handlers */ qh_register_handler("command", "Naemon external commands interface", 0, qh_command); qh_register_handler("echo", "The Echo Service - What You Put Is What You Get", 0, qh_echo); qh_register_handler("help", "Help for the query handler", 0, qh_help); return 0; }