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
00043 #ifndef CCXX_UNIX_H_
00044 #define CCXX_UNIX_H_
00045
00046 #ifndef CCXX_MISSING_H_
00047 #include <cc++/missing.h>
00048 #endif
00049
00050 #ifndef CCXX_SOCKET_H_
00051 #include <cc++/socket.h>
00052 #endif
00053
00054 #ifdef CCXX_NAMESPACES
00055 namespace ost {
00056 #endif
00057
00058 #ifndef WIN32
00059
00073 class UnixSocket : protected Socket {
00074 protected:
00075 friend class UnixStream;
00076 friend class SocketPort;
00077 friend class unixstream;
00078
00079 void close(void);
00080 char *path;
00081
00082 public:
00091 UnixSocket(const char* pathname, int backlog = 5);
00092
00096 inline bool isPendingConnection(timeout_t timeout = TIMEOUT_INF)
00097 {return Socket::isPending(pendingInput, timeout);}
00098
00102 virtual ~UnixSocket();
00103 };
00104
00118 class UnixStream : public Socket, public std::streambuf, public std::iostream {
00119 private:
00120 int doallocate();
00121
00122 protected:
00123 timeout_t timeout;
00124 int bufsize;
00125 char *gbuf, *pbuf;
00126
00131 UnixStream(bool throwflag = true);
00132
00139 void allocate(int size);
00140
00145 void endStream(void);
00146
00153 virtual int underflow(void);
00154
00163 int uflow(void);
00164
00172 int overflow(int ch);
00173
00180 void connect(const char* pathname, int size);
00181
00189 std::iostream *unixstr(void)
00190 {return ((std::iostream *)this);};
00191
00192 public:
00203 UnixStream(UnixSocket &server, int size = 512, bool throwflag = true, timeout_t timeout = 0);
00204
00213 UnixStream(const char* pathname, int size = 512, bool throwflag = true, timeout_t to = 0);
00214
00220 inline void setTimeout(timeout_t to)
00221 {timeout = to;};
00222
00229 UnixStream(const UnixStream &source);
00230
00235 virtual ~UnixStream();
00236
00243 int sync(void);
00244
00252 bool isPending(Pending pend, timeout_t timeout = TIMEOUT_INF);
00253
00259 int getBufferSize(void) const
00260 {return bufsize;};
00261 };
00262
00271 class unixstream : public UnixStream {
00272 public:
00276 unixstream();
00277
00285 unixstream(const char *pathname, int buffer = 512);
00286
00294 unixstream(UnixSocket &unixsock, int buffer = 512);
00295
00303 void open(const char *pathname, int buffer = 512)
00304 { UnixStream::connect( pathname, buffer ); }
00305
00312 void open(UnixSocket &unixsock, int buffer = 512);
00313
00317 void close(void);
00318
00322 bool operator!() const;
00323 };
00324
00335 class __EXPORT UnixSession : public Thread, public UnixStream {
00336 protected:
00349 int waitConnection(timeout_t timeout = TIMEOUT_INF);
00350
00357 void initial(void);
00358
00359 public:
00369 UnixSession(const char* pathname, int size = 512, int pri = 0, int stack = 0);
00370
00380 UnixSession(UnixSocket &server, int size = 512,
00381 int pri = 0, int stack = 0);
00382
00386 virtual ~UnixSession();
00387 };
00388
00389 #endif // ndef WIN32
00390
00391 #ifdef CCXX_NAMESPACES
00392 }
00393 #endif
00394
00395 #endif
00396
00397
00398