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 #ifndef _sockwrap_
00026 #define _sockwrap_
00027
00028
00029
00030 #include "H3DNetworkingUtils/inetaddr.h"
00031 #include "H3DNetworkingUtils/Config.h"
00032
00033 #ifndef SHUT_RD
00034 #define SHUT_RD 0
00035 #define SHUT_WR 1
00036 #define SHUT_RDWR 2
00037 #endif
00038
00039
00040
00041 class H3D_NETWORKING_UTILS_DLL_SPEC CoreSock {
00042 public:
00043 CoreSock ();
00044 virtual ~CoreSock ();
00045
00046
00047 virtual void close ();
00048
00049
00050 virtual int read (void * dest, int max);
00051 virtual int readLine (char * line, int max);
00052
00053
00054 virtual int write (void * source, int count);
00055 virtual int writeLine (char * line);
00056
00057 };
00058
00059
00060
00061 class H3D_NETWORKING_UTILS_DLL_SPEC InetSock : public CoreSock {
00062 protected:
00063 int sock;
00064 int kind;
00065 InetAddr local, remote;
00066
00067 public:
00068 InetSock (int kind, int fd);
00069 virtual ~InetSock ();
00070
00071 virtual void close ();
00072
00073
00074 virtual int connect (InetAddr * endpoint);
00075
00076
00077
00078 virtual int bind (InetAddr * endpoint, int qLength = 4);
00079 enum { ActiveBind = -1 };
00080
00081
00082 void * sysRef () { return (void *)sock; };
00083
00084 virtual InetAddr * localAddress ();
00085 virtual InetAddr * remoteAddress ();
00086
00087 virtual int isUDP ();
00088 virtual int isTCP ();
00089
00090 bool dataReady();
00091
00092 };
00093
00094
00095
00096 class H3D_NETWORKING_UTILS_DLL_SPEC UDPSock : public InetSock {
00097 protected:
00098 int ioWait;
00099
00100 public:
00101 UDPSock ();
00102 virtual ~UDPSock ();
00103
00104
00105 virtual int read (void * dest, int max);
00106 virtual int write (void * source, int count);
00107
00108
00109
00110 virtual int receive (void * dest, int max, InetAddr * sender);
00111 virtual int send (void * source, int count, InetAddr * target);
00112
00113
00114 virtual void setTimeOut (int millisecs);
00115 virtual int timeOut ();
00116
00117 };
00118
00119
00120
00121 class H3D_NETWORKING_UTILS_DLL_SPEC TCPSock : public InetSock {
00122 protected:
00123
00124 char * readBuf;
00125 char * bufPtr;
00126 int bufCount;
00127
00128 int nextChar (char * c);
00129
00130 public:
00131 TCPSock (int fd);
00132 virtual ~TCPSock ();
00133
00134 enum { MaxLineSize = 256 };
00135
00136 virtual TCPSock * accept ();
00137
00138 virtual void shutdown (int direction);
00139
00140 virtual int read (void * dest, int max);
00141 virtual int readLine (char * line, int max);
00142
00143 virtual int write (void * source, int count);
00144 virtual int writeLine (char * line);
00145
00146 };
00147
00148
00149
00150
00151 #endif