// Copyright (c) 2002 David Muse // See the COPYING file for more information. #ifndef RUDIMENTS_INETSERVERSOCKET_H #define RUDIMENTS_INETSERVERSOCKET_H #include <rudiments/private/inetserversocketincludes.h> // The inetserversocket class allows you to write programs that can talk to // other programs across a network over TCP stream sockets. // // The inetserversocket class provides methods for setting up sockets and // accepting client connections. Its ultimate parent class: transport, // provides methods for reading and writing data and closing connections. // // If you need to listen on more than 1 socket at a time, you should use the // inetserversocket class (and possibly the unixserversocket class) in // conjunction with the listener class. #ifdef RUDIMENTS_NAMESPACE namespace rudiments { #endif class inetserversocketprivate; class inetserversocket : public serversocket, private inetsocketutil { public: inetserversocket(); inetserversocket(const inetserversocket &i); inetserversocket &operator=(const inetserversocket &i); virtual ~inetserversocket(); bool listen(const char *address, unsigned short port, int backlog); // Listen on "address" and "port" and allow // "backlog" connections to pile up before // refusing them. // // To listen on all addresses enter a NULL // for "address". Entering a value of 0 for // the "port" causes the server to listen on an // arbitrary port. // // The getPort() method can be used later to // discover this port. // // Returns true on success and false on failure. // If you need to set socket options or do anything special // between the discrete steps of socket initialization, you // should use a combination of these methods. bool initialize(const char *address, unsigned short port); // Creates the actual socket and Initializes the class // to use "address" and "port" when bind() is called. // // Returns true on success and false on failure. bool bind(); // Associates the socket with an address. // // Returns true on success and false on failure. bool listen(int backlog); // Waits until a client connects then places // that connection in queue. Up to "backlog" // connections may be queued before future // conenctions are refused. // // Returns true on success and false on failure. filedescriptor *accept(); // Removes the client connection from the queue // and associates a new socket with that // connection. Communication with the client // may be done over this new socket. // // Returns an inetsocket on success and NULL // on failure. unsigned short getPort(); // Returns the inet port number that // the socket is listening on. If the // port has not been set, 0 is // returned instead. // Writes the address of the client at // the other end of "sock" to "buffer". #include <rudiments/private/inetserversocket.h> }; #ifdef RUDIMENTS_NAMESPACE } #endif #endif