Example #1
0
void engine_change_fd_state(int fd, unsigned int stateplus)
{
   int prevstate = (int) get_fd_internal(fd);

   if((stateplus & FDF_WANTREAD) && !(prevstate & FDF_WANTREAD))
   { 
      FD_SET(fd, &g_read_set);
      prevstate |= FDF_WANTREAD;
   }
   else if(!(stateplus & FDF_WANTREAD) && (prevstate & FDF_WANTREAD))
   {
      FD_CLR(fd, &g_read_set);
      prevstate &= ~(FDF_WANTREAD);
   }

   if((stateplus & FDF_WANTWRITE) && !(prevstate & FDF_WANTWRITE))
   {
      FD_SET(fd, &g_write_set);
      prevstate |= FDF_WANTWRITE;
   }
   else if(!(stateplus & FDF_WANTWRITE) && (prevstate & FDF_WANTWRITE))
   {
      FD_CLR(fd, &g_write_set);
      prevstate &= ~(FDF_WANTWRITE);
   }

   set_fd_internal(fd, (void *) prevstate);
}
void engine_add_fd(long fd)
{
   struct pollfd *pfd = &poll_fds[++last_pfd];

   /* sanity check */
   if(last_pfd >= MAXCONNECTIONS)
      abort();

   set_fd_internal(fd, (void *) last_pfd);

   pfd->fd = fd;
   pfd->events = 0;
   pfd->revents = 0;
}
Example #3
0
void engine_add_fd(int fd)
{
    struct pollfd dev_fd;

    if (numfds >= MAXCONNECTIONS)
        abort();

    dev_fd.events = 0;
    dev_fd.revents = 0;
    dev_fd.fd = fd;
    if (write(devpoll_id, &dev_fd, sizeof(struct pollfd)) != sizeof(struct pollfd))
        abort();

    set_fd_internal(fd, 0);
    ++numfds;
}
Example #4
0
void engine_change_fd_state(int fd, unsigned int stateplus)
{
    unsigned int events = 0;
    struct pollfd dev_fd;

    if (stateplus & FDF_WANTWRITE) events |= POLLOUT;
    if (stateplus & FDF_WANTREAD) events |= POLLIN|POLLHUP|POLLERR;

    dev_fd.events = events;
    dev_fd.revents = 0;
    dev_fd.fd = fd;

    if (write(devpoll_id, &dev_fd, sizeof(struct pollfd)) != sizeof(struct pollfd))
        abort();

    set_fd_internal(fd, (void*)events);
}
void engine_del_fd(long fd)
{
   long arrayidx = (long) get_fd_internal(fd);

   /* If it's at the end of the array, just chop it off */
   if(arrayidx == last_pfd)
   {
      fdfprintf(stderr, "Removing %d[%d] from end of pollfds\n", last_pfd, fd);
      last_pfd--;
      return;
   }

   /* Otherwise, move the last array member to where the old one was */
   fdfprintf(stderr, "Moving pfd %d[%d] to vacated spot %d[%d] -- now %d[%d]\n", 
             last_pfd, poll_fds[last_pfd].fd, arrayidx, fd, last_pfd, fd);
   memcpy(&poll_fds[arrayidx], &poll_fds[last_pfd], sizeof(struct pollfd));
   last_pfd--;
   set_fd_internal(poll_fds[arrayidx].fd, (void *) arrayidx);
}
Example #6
0
void engine_add_fd(int fd)
{
   set_fd_internal(fd, (void *) 0);
}