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 {
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 {
00121 private:
00122 int doallocate();
00123
00124 protected:
00125 timeout_t timeout;
00126 int bufsize;
00127 char *gbuf, *pbuf;
00128
00133 UnixStream(bool throwflag = true);
00134
00141 void allocate(int size);
00142
00147 void endStream(void);
00148
00155 virtual int underflow(void);
00156
00165 int uflow(void);
00166
00174 int overflow(int ch);
00175
00182 void connect(const char* pathname, int size);
00183
00191 std::iostream *unixstr(void)
00192 {return ((std::iostream *)this);};
00193
00194 public:
00205 UnixStream(UnixSocket &server, int size = 512, bool throwflag = true, timeout_t timeout = 0);
00206
00215 UnixStream(const char* pathname, int size = 512, bool throwflag = true, timeout_t to = 0);
00216
00222 inline void setTimeout(timeout_t to)
00223 {timeout = to;};
00224
00231 UnixStream(const UnixStream &source);
00232
00237 virtual ~UnixStream();
00238
00245 int sync(void);
00246
00254 bool isPending(Pending pend, timeout_t timeout = TIMEOUT_INF);
00255
00261 int getBufferSize(void) const
00262 {return bufsize;};
00263 };
00264
00273 class unixstream : public UnixStream
00274 {
00275 public:
00279 unixstream();
00280
00288 unixstream(const char *pathname, int buffer = 512);
00289
00297 unixstream(UnixSocket &unixsock, int buffer = 512);
00298
00306 void open(const char *pathname, int buffer = 512)
00307 { UnixStream::connect( pathname, buffer ); }
00308
00315 void open(UnixSocket &unixsock, int buffer = 512);
00316
00320 void close(void);
00321
00325 bool operator!() const;
00326 };
00327
00338 class __EXPORT UnixSession : public Thread, public UnixStream
00339 {
00340 protected:
00353 int waitConnection(timeout_t timeout = TIMEOUT_INF);
00354
00361 void initial(void);
00362
00363 public:
00373 UnixSession(const char* pathname, int size = 512, int pri = 0, int stack = 0);
00374
00384 UnixSession(UnixSocket &server, int size = 512,
00385 int pri = 0, int stack = 0);
00386
00390 virtual ~UnixSession();
00391 };
00392
00393 #endif // ndef WIN32
00394
00395 #ifdef CCXX_NAMESPACES
00396 }
00397 #endif
00398
00399 #endif
00400
00401
00402