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_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 LINGER_TIME 10
00022 #define WAIT_FOREVER ((time_t)-1)
00023
00024
00025
00026
00027
00028 class GIGABASE_DLL_ENTRY socket_t {
00029 public:
00030 bool read(void* buf, size_t size) {
00031 return read(buf, size, size) == (int)size;
00032 }
00033 virtual int read(void* buf, size_t min_size, size_t max_size,
00034 time_t timeout = WAIT_FOREVER) = 0;
00035 virtual bool write(void const* buf, size_t size) = 0;
00036
00037 virtual bool is_ok() = 0;
00038 virtual void get_error_text(char_t* buf, size_t buf_size) = 0;
00039
00040
00041
00042
00043 virtual socket_t* accept() = 0;
00044
00045
00046
00047
00048 virtual bool cancel_accept() = 0;
00049
00050
00051
00052
00053 virtual bool shutdown() = 0;
00054
00055
00056
00057
00058 virtual bool close() = 0;
00059
00060
00061
00062
00063
00064
00065 virtual char* get_peer_name() = 0;
00066
00067
00068
00069
00070 enum socket_domain {
00071 sock_any_domain,
00072 sock_local_domain,
00073 sock_global_domain
00074 };
00075
00076 static socket_t* connect(char const* address,
00077 socket_domain domain = sock_any_domain,
00078 int max_attempts = DEFAULT_CONNECT_MAX_ATTEMPTS,
00079 time_t timeout = DEFAULT_RECONNECT_TIMEOUT);
00080
00081
00082
00083
00084 static socket_t* create_local(char const* address,
00085 int listen_queue_size =
00086 DEFAULT_LISTEN_QUEUE_SIZE);
00087
00088
00089
00090
00091 static socket_t* create_global(char const* address,
00092 int listen_queue_size =
00093 DEFAULT_LISTEN_QUEUE_SIZE);
00094
00095 virtual ~socket_t() {}
00096 socket_t() { state = ss_close; }
00097
00098 int errcode;
00099 char* address;
00100
00101 protected:
00102 enum { ss_open, ss_shutdown, ss_close } state;
00103 };
00104
00105 END_GIGABASE_NAMESPACE
00106
00107 #endif
00108
00109
00110