Main Page   Class Hierarchy   Compound List   File List   Compound Members  

sockio.h

00001 //-< SOCKIO.H >------------------------------------------------------*--------*
00002 // FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *
00003 // (Main Memory 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_FASTDB_NAMESPACE
00017 
00018 #define DEFAULT_CONNECT_MAX_ATTEMPTS 100
00019 #define DEFAULT_RECONNECT_TIMEOUT    1
00020 #define DEFAULT_LISTEN_QUEUE_SIZE    5
00021 #define WAIT_FOREVER                 ((time_t)-1)
00022 
00023 #ifndef LINGER_TIME
00024 #define LINGER_TIME                  10
00025 #endif
00026 
00027 #ifndef SOCK_NO_DELAY 
00028 #ifndef REPLICATION_SUPPORT
00029 #define SOCK_NO_DELAY                1
00030 #else
00031 #define SOCK_NO_DELAY                0
00032 #endif
00033 #endif
00034 
00035 #ifndef SOCK_SNDBUF_SIZE
00036 #define SOCK_SNDBUF_SIZE             0
00037 #endif
00038 
00039 #ifndef SOCK_LINGER
00040 #define SOCK_LINGER                  0
00041 #endif
00042 
00043 
00044 //
00045 // Abstract socket interface
00046 //
00047 class FASTDB_DLL_ENTRY socket_t { 
00048   public: 
00049     bool              read(void* buf, size_t size) { 
00050         return read(buf, size, size) == (int)size;
00051     }
00052     virtual int       read(void* buf, size_t min_size, size_t max_size, 
00053                            time_t timeout = WAIT_FOREVER) = 0;
00054     virtual bool      write(void const* buf, size_t size) = 0;
00055 
00056     virtual bool      is_ok() = 0; 
00057     virtual void      get_error_text(char* buf, size_t buf_size) = 0;
00058 
00059     //
00060     // This method is called by server to accept client connection
00061     //
00062     virtual socket_t* accept() = 0;
00063 
00064     //
00065     // Cancel accept operation and close socket
00066     //
00067     virtual bool      cancel_accept() = 0;
00068 
00069     //
00070     // Shutdown socket: prohibite write and read operations on socket
00071     //
00072     virtual bool      shutdown() = 0;
00073 
00074     //
00075     // Close socket
00076     //
00077     virtual bool      close() = 0;
00078 
00079     //
00080     // Get socket peer name.
00081     // name is created using new char[]. If perr name can not be obtained NULL
00082     // is returned and errcode is set.
00083     //
00084     virtual char*     get_peer_name() = 0;
00085 
00086     //
00087     // Create client socket connected to local or global server socket
00088     //
00089     enum socket_domain { 
00090         sock_any_domain,   // domain is chosen automatically
00091         sock_local_domain, // local domain (i.e. Unix domain socket) 
00092         sock_global_domain // global domain (i.e. INET sockets) 
00093     };
00094 
00095     static socket_t*  connect(char const* address, 
00096                               socket_domain domain = sock_any_domain, 
00097                               int max_attempts = DEFAULT_CONNECT_MAX_ATTEMPTS,
00098                               time_t timeout = DEFAULT_RECONNECT_TIMEOUT);
00099     
00100     //
00101     // Create local domain socket
00102     //
00103     static socket_t*  create_local(char const* address,
00104                                    int listen_queue_size = 
00105                                        DEFAULT_LISTEN_QUEUE_SIZE);
00106 
00107     //
00108     // Create global domain socket 
00109     //
00110     static socket_t*  create_global(char const* address,
00111                                    int listen_queue_size = 
00112                                        DEFAULT_LISTEN_QUEUE_SIZE);
00113 
00114     virtual int get_handle() = 0;
00115 
00116     virtual ~socket_t() {} 
00117     socket_t() { state = ss_close; }
00118 
00119   protected:
00120     enum { ss_open, ss_shutdown, ss_close } state;
00121 };
00122 
00123 END_FASTDB_NAMESPACE
00124 
00125 #endif
00126 
00127 
00128 

Generated on Mon Oct 23 13:23:58 2006 for FastDB by doxygen1.2.18