Main Page | Class Hierarchy | Class List | File List | Class Members

sockio.h

00001 //-< SOCKIO.H >------------------------------------------------------*--------*
00002 // GigaBASE                  Version 1.0         (c) 1999  GARRET    *     ?  *
00003 // (Post Relational Database Management System)                      *   /\|  *
00004 //                                                                   *  /  \  *
00005 //                          Created:      7-Jan-97    K.A. Knizhnik  * / [] \ *
00006 //                          Last update: 23-Apr-97    K.A. Knizhnik  * GARRET *
00007 //-------------------------------------------------------------------*--------*
00008 // Socket abstraction
00009 //-------------------------------------------------------------------*--------*
00010 
00011 #ifndef __SOCKIO_H__
00012 #define __SOCKIO_H__
00013 
00014 #include "stdtp.h"
00015 
00016 BEGIN_GIGABASE_NAMESPACE
00017 
00018 #define DEFAULT_CONNECT_MAX_ATTEMPTS 100
00019 #define DEFAULT_RECONNECT_TIMEOUT    1
00020 #define DEFAULT_LISTEN_QUEUE_SIZE    5
00021 #define LINGER_TIME                  10
00022 #define WAIT_FOREVER                 ((time_t)-1)
00023 
00024 
00025 //
00026 // Abstract socket interface
00027 //
00028 class GIGABASE_DLL_ENTRY socket_t {
00029   public:
00030     bool              read(void* buf, size_t size) {
00031         return read(buf, size, size) == (int)size;
00032     }
00033     virtual int       read(void* buf, size_t min_size, size_t max_size,
00034                            time_t timeout = WAIT_FOREVER) = 0;
00035     virtual bool      write(void const* buf, size_t size) = 0;
00036 
00037     virtual bool      is_ok() = 0;
00038     virtual void      get_error_text(char_t* buf, size_t buf_size) = 0;
00039 
00040     //
00041     // This method is called by server to accept client connection
00042     //
00043     virtual socket_t* accept() = 0;
00044 
00045     //
00046     // Cancel accept operation and close socket
00047     //
00048     virtual bool      cancel_accept() = 0;
00049 
00050     //
00051     // Shutdown socket: prohibite write and read operations on socket
00052     //
00053     virtual bool      shutdown() = 0;
00054 
00055     //
00056     // Close socket
00057     //
00058     virtual bool      close() = 0;
00059 
00060     //
00061     // Get socket peer name.
00062     // name is created using new char[]. If perr name can not be obtained NULL
00063     // is returned and errcode is set.
00064     //
00065     virtual char*     get_peer_name() = 0;
00066 
00067     //
00068     // Create client socket connected to local or global server socket
00069     //
00070     enum socket_domain {
00071         sock_any_domain,   // domain is chosen automatically
00072         sock_local_domain, // local domain (i.e. Unix domain socket)
00073         sock_global_domain // global domain (i.e. INET sockets)
00074     };
00075 
00076     static socket_t*  connect(char const* address,
00077                               socket_domain domain = sock_any_domain,
00078                               int max_attempts = DEFAULT_CONNECT_MAX_ATTEMPTS,
00079                               time_t timeout = DEFAULT_RECONNECT_TIMEOUT);
00080 
00081     //
00082     // Create local domain socket
00083     //
00084     static socket_t*  create_local(char const* address,
00085                                    int listen_queue_size =
00086                                        DEFAULT_LISTEN_QUEUE_SIZE);
00087 
00088     //
00089     // Create global domain socket
00090     //
00091     static socket_t*  create_global(char const* address,
00092                                    int listen_queue_size =
00093                                        DEFAULT_LISTEN_QUEUE_SIZE);
00094 
00095     virtual ~socket_t() {}
00096     socket_t() { state = ss_close; }
00097 
00098     int   errcode;     // error code of last failed operation
00099     char* address;     // host address
00100 
00101   protected:
00102     enum { ss_open, ss_shutdown, ss_close } state;
00103 };
00104 
00105 END_GIGABASE_NAMESPACE
00106 
00107 #endif
00108 
00109 
00110 

Generated on Thu Feb 12 18:46:27 2004 for GigaBASE by doxygen 1.3.5