00001
00002
00003
00004
00005
00006
00007
00008
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
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
00051
00052 virtual socket_t* accept() = 0;
00053
00054
00055
00056
00057 virtual bool cancel_accept() = 0;
00058
00059
00060
00061
00062 virtual bool shutdown() = 0;
00063
00064
00065
00066
00067 virtual bool close() = 0;
00068
00069
00070
00071
00072
00073
00074 virtual char* get_peer_name() = 0;
00075
00076
00077
00078
00079 enum socket_domain {
00080 sock_any_domain,
00081 sock_local_domain,
00082 sock_global_domain
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
00092
00093 static socket_t* create_local(char const* address,
00094 int listen_queue_size =
00095 DEFAULT_LISTEN_QUEUE_SIZE);
00096
00097
00098
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