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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00044 #ifndef CCXX_UNIX_H_
00045 #define CCXX_UNIX_H_
00046
00047 #ifndef CCXX_MISSING_H_
00048 #include <cc++/missing.h>
00049 #endif
00050
00051 #ifndef CCXX_SOCKET_H_
00052 #include <cc++/socket.h>
00053 #endif
00054
00055 #ifdef CCXX_NAMESPACES
00056 namespace ost {
00057 #endif
00058
00059 #ifndef WIN32
00060
00074 class UnixSocket : protected Socket {
00075 protected:
00076 friend class UnixStream;
00077 friend class SocketPort;
00078 friend class unixstream;
00079
00080 void close(void);
00081 char *path;
00082
00083 public:
00092 UnixSocket(const char* pathname, int backlog = 5);
00093
00097 inline bool isPendingConnection(timeout_t timeout = TIMEOUT_INF)
00098 {return Socket::isPending(pendingInput, timeout);}
00099
00103 virtual ~UnixSocket();
00104 };
00105
00119 class UnixStream : public Socket, public std::streambuf, public std::iostream {
00120 private:
00121 int doallocate();
00122
00123 protected:
00124 timeout_t timeout;
00125 int bufsize;
00126 char *gbuf, *pbuf;
00127
00132 UnixStream(bool throwflag = true);
00133
00140 void allocate(int size);
00141
00146 void endStream(void);
00147
00154 virtual int underflow(void);
00155
00164 int uflow(void);
00165
00173 int overflow(int ch);
00174
00181 void connect(const char* pathname, int size);
00182
00190 std::iostream *unixstr(void)
00191 {return ((std::iostream *)this);};
00192
00193 public:
00204 UnixStream(UnixSocket &server, int size = 512, bool throwflag = true, timeout_t timeout = 0);
00205
00214 UnixStream(const char* pathname, int size = 512, bool throwflag = true, timeout_t to = 0);
00215
00221 inline void setTimeout(timeout_t to)
00222 {timeout = to;};
00223
00230 UnixStream(const UnixStream &source);
00231
00236 virtual ~UnixStream();
00237
00244 int sync(void);
00245
00253 bool isPending(Pending pend, timeout_t timeout = TIMEOUT_INF);
00254
00260 int getBufferSize(void) const
00261 {return bufsize;};
00262 };
00263
00272 class unixstream : public UnixStream {
00273 public:
00277 unixstream();
00278
00286 unixstream(const char *pathname, int buffer = 512);
00287
00295 unixstream(UnixSocket &unixsock, int buffer = 512);
00296
00304 void open(const char *pathname, int buffer = 512)
00305 { UnixStream::connect( pathname, buffer ); }
00306
00313 void open(UnixSocket &unixsock, int buffer = 512);
00314
00318 void close(void);
00319
00323 bool operator!() const;
00324 };
00325
00336 class __EXPORT UnixSession : public Thread, public UnixStream {
00337 protected:
00350 int waitConnection(timeout_t timeout = TIMEOUT_INF);
00351
00358 void initial(void);
00359
00360 public:
00370 UnixSession(const char* pathname, int size = 512, int pri = 0, int stack = 0);
00371
00381 UnixSession(UnixSocket &server, int size = 512,
00382 int pri = 0, int stack = 0);
00383
00387 virtual ~UnixSession();
00388 };
00389
00390 #endif // ndef WIN32
00391
00392 #ifdef CCXX_NAMESPACES
00393 }
00394 #endif
00395
00396 #endif
00397
00398
00399