Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

socketc.h

Go to the documentation of this file.
00001 /*
00002 Copyright (C) 1999  Carsten Winkelholz
00003 
00004 Address:  FGAN Forschungsgesellschaft fr Angewandte Naturwissenschaften e. V.
00005       Neuenahrer Str. 20
00006       D - 53343 Wachtberg
00007       
00008 Email:    winkelholz@fgan.de
00009 
00010 This program is free software; you can redistribute it and/or
00011 modify it under the terms of the GNU General Public License
00012 as published by the Free Software Foundation; either version 2
00013 of the License, or (at your option) any later version.
00014 
00015 This program is distributed in the hope that it will be useful,
00016 but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 GNU General Public License for more details.
00019 
00020 You should have received a copy of the GNU General Public License
00021 along with this program; if not, write to the Free Software
00022 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
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   //void SendByteArrayTo(ByteArrayC&, const SockAddressC& des);
00099   //void RecvByteArrayFrom(ByteArrayC&, SockAddressC& addr, const long&);
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 

Generated on Tue Jul 29 14:24:15 2003 for Open ActiveWrl by doxygen1.3-rc2