00001
00002
00003
00004
00005
00006
00007
00008
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
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
00060
00061 virtual socket_t* accept() = 0;
00062
00063
00064
00065
00066 virtual bool cancel_accept() = 0;
00067
00068
00069
00070
00071 virtual bool shutdown() = 0;
00072
00073
00074
00075
00076 virtual bool close() = 0;
00077
00078
00079
00080
00081
00082
00083 virtual char* get_peer_name() = 0;
00084
00085
00086
00087
00088 enum socket_domain {
00089 sock_any_domain,
00090 sock_local_domain,
00091 sock_global_domain
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
00101
00102 static socket_t* create_local(char const* address,
00103 int listen_queue_size =
00104 DEFAULT_LISTEN_QUEUE_SIZE);
00105
00106
00107
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