/*
 * $Log: fdset,v $
 * Revision 1.2  1998/05/28 19:41:10  joseph
 * Changed all printf()'s to debug_printf(())'s
 *
 * Revision 1.1.1.1  1997/12/29 14:37:55  jogu
 * WebGet Initial CMS Ver
 *
 */


/* fdset.c */

/* maintains a list of file descriptors we need to check with select */

#include <string.h>

#include "sys/select.h"

#include "fdset.h"

/*static*/ fd_set fd_readfds,
       	          fd_writefds;
/*static*/ int    fd_maxfdno;

void fdset_init(void)
{
  FD_ZERO(&fd_readfds);
  FD_ZERO(&fd_writefds);
  fd_maxfdno = -1; /* 0 is a valid socket! */
}

void fdset_addwrite(int sock)
{
  FD_SET(sock, &fd_writefds);
  if (sock > fd_maxfdno)
    fd_maxfdno = sock;
}

void fdset_movetoread(int sock)
{
  FD_CLR(sock, &fd_writefds);
  FD_SET(sock, &fd_readfds);
}

#include <stdio.h>
void fdset_close(int *sock)
{
  extern int close(int /* s */); /* NetLib. grr. */
//  debug_printf(("***  Fdset_close(%d)\n",*sock));
  if (*sock==-1) return;
  close(*sock);
  FD_CLR(*sock, &fd_readfds);
  FD_CLR(*sock, &fd_writefds);
  if (*sock >= fd_maxfdno)
  {
    int s;
    fd_maxfdno = -1;
    for (s = 0; s < *sock; s++)
      if ( FD_ISSET(s, &fd_readfds) || FD_ISSET(s, &fd_writefds) )
        fd_maxfdno = s;
  }
  *sock = -1;
}
