static void* serverCallback(void* arg) { try { ServerData* data = static_cast<ServerData*>(arg); SocketServer* server = new SocketServer; std::string host = "127.0.0.1"; if (!data->isServer) host = "127.0.0.2"; server->run(serverHandleCallback, host); delete server; data->serverThread->exit(); } catch (ISocket::Exception& e) { std::cerr << e.what() << std::endl; } return NULL; }
int main (int argc, char * argv []) { int i = 0; bool daemon = true; while (i<argc) { if (++i >= argc) break; if (String ("-nd") == argv [i] || String ("--no-daemon") == argv [i]) { daemon = false; continue; } if (String ("-v") == argv [i] || String ("--verbose") == argv [i]) { if (++i >= argc) { std::cerr << "No argument for option " << argv [i-1] << "\n"; return -1; } DebugOutput::set_verbose_level (atoi (argv [i])); continue; } if (String ("-m") == argv [i] || String ("--mask") == argv [i]) { if (++i >= argc) { std::cerr << "No argument for option " << argv [i-1] << "\n"; return -1; } if (String (argv [i]) != "none") { std::vector<String> debug_mask_list; scim_split_string_list (debug_mask_list, argv [i], ','); DebugOutput::disable_debug (SCIM_DEBUG_AllMask); for (size_t j=0; j<debug_mask_list.size (); j++) DebugOutput::enable_debug_by_name (debug_mask_list [j]); } continue; } if (String ("-o") == argv [i] || String ("--output") == argv [i]) { if (++i >= argc) { std::cerr << "No argument for option " << argv [i-1] << "\n"; return -1; } DebugOutput::set_output (String (argv [i])); continue; } std::cerr << "Invalid command line option: " << argv [i] << "\n"; return -1; } //End of command line parsing. load_helper_modules (); if (!initialize_socket_server ()) { std::cerr << "Can't initialize SocketServer.\n"; return -1; } if (daemon) scim_daemon (); signal(SIGQUIT, signalhandler); signal(SIGTERM, signalhandler); signal(SIGINT, signalhandler); signal(SIGHUP, signalhandler); __socket_server.run (); SCIM_DEBUG_MAIN (1) << "exit scim-helper-manager.\n"; }