LINUX.ORG.RU

Select (Alex)


0

0

Pytayus` naity chto - to delnoje v knigah po UNIX ob ispolzovanii "Select" v socket programming , no ne naho>|<u. Pomogite razobratsa! Mo>|<et dadite adresok v i-net. Spasibo . Alex.

anonymous

далеко не идеальный пример:

    fd_set rset, allset;
    FD_ZERO(&allset);
    FD_SET(sd_mond, &allset);   // некий демон
    FD_SET(sd_conn, &allset);   // клиент (один здесь)
    int maxfd = sd_conn + 1;
    int nready;

// go in the main loop...
    for(;;) {

// обнуляем последовательность (ну хорошо, множество) для ожидаемых сокетов 
      rset = allset;

// ждёмс...
      nready = select(maxfd, &rset, NULL, NULL, NULL);

// кому-то очень хочется прикрыть лавочку (родителю, например)...
      if ( must_terminate ) break;

// что-то случилось ?
      if ( nready <=0 ) {
	log << argv[0] << ": " << DAQ_GetTime()
	    << " select() interrupted" << endl;
	continue;
      }

// перепихнёмся с демоном (это уже частности)...
      if ( FD_ISSET(sd_mond, &rset) ) {
	net_ec >> event;
	if ( ! net_ec ) {
	  cout << DAQ_GetTime() << argv[0] << ": "
	       << net_ec.StrError() << endl;
	  break;
	}
	net_ec.Signal();
	if ( ! net_ec ) {
	  cout << argv[0] << ": " << DAQ_GetTime()
	       << net_ec.StrError() << endl;
	  break;
	}
	addEvent(event);
      }

// или с клиентом...
      if ( FD_ISSET(sd_conn,  &rset) ) execCommand();

// все довольны, идём на следующую итерацию
    }

filin ★★
()
31 июля 2002 г.

Спасибо пацаны !
Выручили.
А то не понимал ничего.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.