コード例 #1
0
ファイル: bellboy.c プロジェクト: poutyface/bellboy
static void bb_select_once()
{
  int i;
  fd_set fdreads;
  int fdmax = 0;
  int n;

  FD_ZERO(&fdreads);

  for(i=0; i<RECEIVERS_MAX && BellBoy->receivers[i] != NULL; ++i){
    Receiver *rev = BellBoy->receivers[i];
    log_debug("bb_select_once:select %d:%d", i, rev->fd);

    if(rev->select_for_read == false)
      continue;

    FD_SET(rev->fd, &fdreads);

    if(fdmax < rev->fd)
      fdmax = rev->fd;
  }

  n = select(fdmax+1, &fdreads, NULL, NULL, &BellBoy->select_timeout);

  if(n > 0){
    for(i=0; i<RECEIVERS_MAX && BellBoy->receivers[i] != NULL; ++i){
      Receiver *rev = BellBoy->receivers[i];

      if(FD_ISSET(rev->fd, &fdreads)){
        log_debug("bb_select_once:call %d:%d", i, rev->fd);
        rev->select_for_read = rev->call(rev->fd, rev->data);
      }
    }
  }
}