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, time_t timeout = WAIT_FOREVER) = 0;
00053     virtual bool      write(void const* buf, size_t size, time_t timeout = WAIT_FOREVER) = 0;
00054 
00055     virtual bool      is_ok() = 0; 
00056     virtual void      get_error_text(char* buf, size_t buf_size) = 0;
00057 
00058     //
00059     // This method is called by server to accept client connection
00060     //
00061     virtual socket_t* accept() = 0;
00062 
00063     //
00064     // Cancel accept operation and close socket
00065     //
00066     virtual bool      cancel_accept() = 0;
00067 
00068     //
00069     // Shutdown socket: prohibite write and read operations on socket
00070     //
00071     virtual bool      shutdown() = 0;
00072 
00073     //
00074     // Close socket
00075     //
00076     virtual bool      close() = 0;
00077 
00078     //
00079     // Get socket peer name.
00080     // name is created using new char[]. If perr name can not be obtained NULL
00081     // is returned and errcode is set.
00082     //
00083     virtual char*     get_peer_name() = 0;
00084 
00085     //
00086     // Create client socket connected to local or global server socket
00087     //
00088     enum socket_domain { 
00089         sock_any_domain,   // domain is chosen automatically
00090         sock_local_domain, // local domain (i.e. Unix domain socket) 
00091         sock_global_domain // global domain (i.e. INET sockets) 
00092     };
00093 
00094     static socket_t*  connect(char const* address, 
00095                               socket_domain domain = sock_any_domain, 
00096                               int max_attempts = DEFAULT_CONNECT_MAX_ATTEMPTS,
00097                               time_t timeout = DEFAULT_RECONNECT_TIMEOUT);
00098     
00099     //
00100     // Create local domain socket
00101     //
00102     static socket_t*  create_local(char const* address,
00103                                    int listen_queue_size = 
00104                                        DEFAULT_LISTEN_QUEUE_SIZE);
00105 
00106     //
00107     // Create global domain socket 
00108     //
00109     static socket_t*  create_global(char const* address,
00110                                    int listen_queue_size = 
00111                                        DEFAULT_LISTEN_QUEUE_SIZE);
00112 
00113     virtual int get_handle() = 0;
00114 
00115     virtual ~socket_t() {} 
00116     socket_t() { state = ss_close; }
00117 
00118   protected:
00119     enum { ss_open, ss_shutdown, ss_close } state;
00120 };
00121 
00122 END_FASTDB_NAMESPACE
00123 
00124 #endif
00125 
00126 
00127 

Generated on Thu Feb 14 12:42:30 2008 for FastDB by doxygen1.2.18