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

Generated on Fri Nov 15 21:06:29 2002 for FastDB by doxygen1.2.15