Esempio n. 1
0
void PIAEngine::run(int argc, char *argv[]) {
    std::thread sendThread(&SendSocket::run, &sendTemp);
    sendThread.detach();

    std::thread receivingThread(&ReceivingSocket::run, &receiveTemp);
    receivingThread.detach();

    std::thread announceThread(&Announcement::run, &announcement);
    announceThread.detach();

    GUIController guiControl(argc, argv, &queueController, &routingTable, settings, &chatHistory);
    std::thread GUI(&GUIController::startGui, guiControl);

    std::thread queueControllerThread(&QueueController::run, &queueController);
    queueControllerThread.detach();

    // Wait for the GUI to be joinable
    if (GUI.joinable()) {
        GUI.join();
    }
    std::cout << "CLOSING" << std::endl;
}
Esempio n. 2
0
int __cdecl
#else
int
#endif
main(int argc, char **argv)
#endif
{
   int rv = 0;
   int c;
#ifndef NO_THREADS
   char message[32];
   pthread_t thread[2];
   int  iret[2];
#endif

#ifdef METACOMMAND
   fpdbg = stdout;
#endif
   printf("%s ver %s\n", progname,progver);

   while ( (c = getopt( argc, argv,"ab:ce:gi:l:mp:r:s:x?")) != EOF ) 
      switch(c) {
          case 'a': fBroadcastOk = 1; fping = 1;
		break;  /*all (broadcast ping)*/
	  case 'c':  /*canonical, CSV*/
		fcanonical = 1;
		bdelim = BCOMMA;
		break; 
          case 'm':  /* show MAC address, use raw, requires root priv */
		fBroadcastOk = 1; fping = 1; fraw = 1; 
		break;  /*all (broadcast ping)*/
          case 'l': g_limit = atoi(optarg); break;
          case 'g': fping = 0; break;   /*use get chan auth cap method */
          case 'b':   /*begin*/
                strncpy(g_startDest,optarg,MAXHOSTNAMELEN);
		break;
          case 'e':   /*end*/
                strncpy(g_endDest,optarg,MAXHOSTNAMELEN);
		break;
          case 'i':   /*interface*/
                strncpy(g_interface,optarg,sizeof(g_interface));
		break;
          case 'p':   /*port/socket*/
                g_port = (ushort)atoi(optarg);
		break;
          case 'r':   /*repeat N times*/
                g_repeat = atoi(optarg);
		break;
          case 's':   /*subnet*/
                /* copy optarg from 10.243.42.0 or similar, to
                 * begin/end range. */
		break;
          case 'x': fdebug = 1;     break;  /* debug messages */
	  default:
		if (fdebug) printerr("getopt(%c) default\n",c);
                show_usage();
                rv = ERR_USAGE;
		goto do_exit;
      }
#ifdef WIN32
   /* Winsock inet_aton() does not like 255.255.255.255 */
   if (!fBroadcastOk && (g_startDest[0] == 0) ) {
      show_usage();
      printerr("A beginning IP is required, using -b\n");
      goto do_exit;
   }
#else
   if (g_startDest[0] == 0)  {
      strcpy(g_startDest,"255.255.255.255"); /* INADDR_BROADCAST */
      fBroadcastOk = 1;  
   }
#endif
    if (fraw == 1) {
      if (frawok == 0) {
	printf("Warning: SOCK_RAW not yet implemented on this OS\n");
      } 
#ifdef LINUX
     else {
        c = geteuid();
        if (c > 1) printf("Must be root/superuser to use SOCK_RAW\n");
      }
#endif
   }
   if (g_endDest[0] == 0 || fBroadcastOk) 
      strcpy(g_endDest,g_startDest);   /*only one IP address*/
   if (fdebug) 
      printerr("intf=%s begin=%s end=%s port=%d\n",
		g_interface,g_startDest,g_endDest,g_port);

   rv = sock_init(g_interface, g_startDest, g_endDest); 
   if (fdebug) printerr("sock_init rv = %d, sockfd = %d\n",rv,g_sockfd);
   if (rv != 0) {
      show_usage();
      printerr("sock_init error %d\n",rv);
      goto do_exit;
   }

   printf("Discovering IPMI Devices:\n");
#ifdef NO_THREADS
   sendThread(NULL);
#else
   iret[1] = pthread_create( &thread[1], NULL, receiveThread, (void*) message);
   iret[0] = pthread_create( &thread[0], NULL, sendThread, (void*) message);
   pthread_join( thread[0], NULL);
   pthread_join( thread[1], NULL);
#endif

   // if (fdebug) 
   printf("\n%s: %d pings sent, %d responses\n",progname,g_npings,g_npongs);

do_exit:
   cleanup();
   return(rv);
}  /* end main()*/