// Copyright (c) 1999-2000 David Muse
// See the COPYING file for more information.

#ifndef SERVERPOOL_H
#define SERVERPOOL_H

#include <rudiments/serversocket.h>

// The server class manages a pool of sockets.

#include <rudiments/private/socketnode.h>

class serversocketpool {
        public:
                        serversocketpool();
                virtual ~serversocketpool();

                void    addSocket(serversocket *sock);
                        // Adds the specified server to the pool of 
                        // sockets that the server is listening on.

                int     waitForClientConnection(int timeoutsec, 
                                                int timeoutusec,
                                                serversocket **whichsock,
                                                genericsocket **clientsock);
                                // Waits for client connections on any of the
                                // sockets in the pool for "timeoutsec" seconds
                                // and "timeoutusec" milliseconds before 
                                // falling through.  
                                //
                                // Entering -1 for either parameter causes the 
                                // method to wait indefinitely.  
                                //
                                // Entering 0 for both parameters causes the 
                                // method to fall through immediately unless a
                                // client is already trying to connect.
                                //
                                // When a client connects, "whichsock" is set
                                // to the socket in the pool that the client
                                // connected to and "clientsock" is set to the 
                                // socket that can be used to communicate with 
                                // the client.
                                //
                                // Note that "clientsock" must be deleted after
                                // it's been used.
                                //
                                // Returns 1 on success, 0 on timeout and -1
                                // on error.

                int     removeSocket(serversocket *sock);
                        // Removes the specified socket from the pool.

                void    removeAllSockets();
                        // Removes every socket from the pool.

        protected:
                #include <rudiments/private/serversocketpool.h>

};

#endif