• Main Page
  • Classes
  • Files
  • File List

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

Generated on Mon Aug 23 2010 00:04:01 for GigaBASE by  doxygen 1.7.1