// Class definition for socket level programming
// using C++.

#ifndef SOCKETCLASS_H
#define SOCKETCLASS_H

#include <stdlib.h>
#include <stdio.h>
#include <stream.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>

// Error constants

#define NO_ERROR                0
#define SOCKET_OPEN_FAIL       -1
#define SOCKET_BIND_FAIL       -2
#define SOCKET_LISTEN_FAIL     -3
#define SOCKET_IO_FAIL         -4
#define DNS_DB_ERROR           -5
#define SOCKET_CONNECT_FAIL    -6
#define SOCKET_ACCEPT_FAIL     -7

class Socket
{

   public:
      // Constructors

      Socket (char *host, int port);
      Socket (int lsock);      
      
      // Methods

      void         Close ();
      int          Error ();
      char         *ErrorMessage ();
      int          GetSocketNum ();

   private:
      int        sock;
      int        error;
};

class ServerSocket
{

   public:
      // Constructors

      ServerSocket (int port);


      // Methods

      Socket       Accept ();
      void         Close ();
      int          Error ();
      char         *ErrorMessage ();
      int          GetSocketNum ();

   private:
      int      sock;
      int      error;

};



#endif