00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef SOCKETC_H
00027 #define SOCKETC_H
00028
00029 #include "oaw/misc/sockmisc.h"
00030 #include "oaw/misc/stringc.h"
00031 #include "oaw/misc/arrayc.h"
00032
00033 #include "../oawconfig.h"
00034
00035 OAW_BEGIN_NAMESPACE
00036
00037 enum SocketType{
00038 cStream,
00039 cDatagramm
00040 };
00041
00043
00044 #define ESOCKETC_BIND_FAILED 0
00045 #define ESOCKETC_LISTEN_FAILED 1
00046 #define ESOCKETC_CREATE_SOCKET_FAILED 2
00047 #define ESOCKETC_ACCEPT_FAILED 3
00048 #define ESOCKETC_CONNECT_FAILED 4
00049 #define ESOCKETC_SETSOCKOPT_FAILED 5
00050 #define ESOCKETC_LOST_CONNECTION 6
00051 #define ESOCKETC_ADDRESS_NOT_EXISTS 7
00052 #define ESOCKETC_SELECT_FAILED 8
00053 #define ESOCKETC_TIMEOUT 9
00054 #define ESOCKETC_DGRAM_SEND_ERROR 10
00055 #define ESOCKETC_DGRAM_READ_ERROR 11
00056 #define ESOCKETC_CLOSE_FAILED 12
00057
00059
00060 class OAW_DLLMAPPING SockAddressC{
00061 public:
00062 SockAddressC();
00063 SockAddressC(const StringC& netaddress,const StringC& endpoint);
00064 SockAddressC(const SockAddressC&);
00065 int Set(const StringC& netaddress,const StringC& endpoint);
00066 int SetNetAddress(const StringC& netaddress);
00067 void SetEndpoint(const StringC& endpoint);
00068 SockAddressC& operator = (const SockAddressC&);
00069 const int& GetStatus(){return m_status;}
00070 int SetLocalHost();
00071 StringC GetIP();
00072 public:
00073 sockaddr_in m_address;
00074 int m_status;
00075 };
00076
00078
00079 class OAW_DLLMAPPING SocketC
00080 {
00081 public:
00082 SocketC();
00083
00084 SocketC(SocketType);
00085 SocketC(const SocketC&);
00086 ~SocketC();
00087 SocketC& operator = (const SocketC&);
00088
00089 void Bind(const char* endpoint,const char* localIP=0);
00090 void Listen(int);
00091 void Connect(SockAddressC& des);
00092 SocketC Accept(SockAddressC&);
00093
00094
00095
00096 void SendLongTo(const long&, const SockAddressC& des);
00097 void RecvLongFrom(long&, SockAddressC& addr);
00098
00099
00100
00101 long SendTo(const char* data, int len, const SockAddressC& des);
00102 long RecvFrom(char* data, int buflen, SockAddressC& addr);
00103 long RecvData(char* data, int buflen);
00104
00105 void Send(char* data, int len);
00106 void SendString(const StringC&);
00107 void SendByteArray(ByteArrayC&);
00108 void SendLong(const long&);
00109
00110 void Recv(char* data, int buflen);
00111 void RecvString(StringC&);
00112 void RecvByteArray(ByteArrayC&);
00113 void RecvLong(long&);
00114
00115 long GetMaxMsgSize();
00116 void EnableBroadcast(int);
00117 void EnableReuseAddress(int);
00118 void EnableReusePort(int);
00119
00120 SOCKET GetHandle(){return m_socket;}
00121
00122 short ReadyToRead();
00123
00124
00125 private:
00126 SocketC(SOCKET);
00127
00128 protected:
00129 SOCKET m_socket;
00130 short m_port;
00131 SocketType m_type;
00132
00133 sockaddr_in m_localAddress;
00134 sockaddr_in m_destinationAddress;
00135 };
00136
00138
00139
00140 class OAW_DLLMAPPING SocketFactoryC{
00141 public:
00142 SocketFactoryC();
00143 ~SocketFactoryC();
00144 SOCKET CreateSocket(SocketType type);
00145 void AddHandleFromAccept(SOCKET);
00146 void IncHandleCounter(SOCKET);
00147 void DecHandleCounter(SOCKET);
00148 protected:
00149 ArrayC<SOCKET> m_handleList;
00150 ArrayC<int> m_handleCounter;
00151 };
00152
00154
00155 extern SocketFactoryC s_socketFactory;
00156
00157 class ESocketC{
00158 public:
00159 ESocketC(const long& l){m_errorCode = l;}
00160 ESocketC(const StringC& s, const long& l){m_errorString = s;m_errorCode = l;}
00161 public:
00162 StringC m_errorString;
00163 long m_errorCode;
00164 };
00165
00167
00168
00169
00170 class OAW_DLLMAPPING SocketSetC{
00171 public:
00172 SocketSetC();
00173 void Add(SocketC&);
00174 void Remove(SocketC&);
00175 int SelectRead(const long&,const long&,ArrayC<long>&);
00176 protected:
00177 ArrayC<SOCKET> m_socketList;
00178 fd_set m_fds;
00179 SOCKET m_max;
00180 };
00181
00182
00183
00185
00186 OAW_END_NAMESPACE
00187
00188 #endif
00189
00190
00191
00192
00193
00194
00195