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
00039
00040
00046
#ifndef CCXX_UNIX_H_
00047
#define CCXX_UNIX_H_
00048
00049
#ifndef CCXX_MISSING_H_
00050
#include <cc++/missing.h>
00051
#endif
00052
00053
#ifndef CCXX_SOCKET_H_
00054
#include <cc++/socket.h>
00055
#endif
00056
00057
#ifdef CCXX_NAMESPACES
00058
namespace ost {
00059
#endif
00060
00061
#ifndef WIN32
00062
00076 class UnixSocket :
protected Socket
00077 {
00078
protected:
00079
friend class UnixStream;
00080
friend class SocketPort;
00081
friend class unixstream;
00082
00083
void close(
void);
00084 char *
path;
00085
00086
public:
00095
UnixSocket(
const char* pathname,
int backlog = 5);
00096
00100 inline bool isPendingConnection(
timeout_t timeout = TIMEOUT_INF)
00101 {
return Socket::isPending(pendingInput, timeout);}
00102
00106 virtual ~UnixSocket()
00107 {
close();};
00108 };
00109
00123 class UnixStream :
public Socket,
public std::streambuf,
public std::iostream
00124 {
00125
private:
00126
int doallocate();
00127
00128
protected:
00129 timeout_t timeout;
00130 int bufsize;
00131 char *
gbuf, *
pbuf;
00132
00137
UnixStream(
bool throwflag =
true);
00138
00145
void allocate(
int size);
00146
00151
void endStream(
void);
00152
00159
virtual int underflow(
void);
00160
00169
int uflow(
void);
00170
00178
int overflow(
int ch);
00179
00186
void connect(
const char* pathname,
int size);
00187
00195 std::iostream *
unixstr(
void)
00196 {
return ((std::iostream *)
this);};
00197
00198
public:
00209
UnixStream(
UnixSocket &server,
int size = 512,
bool throwflag =
true,
timeout_t timeout = 0);
00210
00219
UnixStream(
const char* pathname,
int size = 512,
bool throwflag =
true,
timeout_t to = 0);
00220
00226 inline void setTimeout(
timeout_t to)
00227 {
timeout = to;};
00228
00235
UnixStream(
const UnixStream &source);
00236
00241 virtual ~UnixStream()
00242 {
endStream();};
00243
00250
int sync(
void);
00251
00259
bool isPending(Pending pend,
timeout_t timeout = TIMEOUT_INF);
00260
00266 int getBufferSize(
void)
const
00267
{
return bufsize;};
00268 };
00269
00278 class unixstream :
public UnixStream
00279 {
00280
public:
00284
unixstream();
00285
00293
unixstream(
const char *pathname,
int buffer = 512);
00294
00302
unixstream(
UnixSocket &unixsock,
int buffer = 512);
00303
00311 void open(
const char *pathname,
int buffer = 512)
00312 { UnixStream::connect( pathname, buffer ); }
00313
00320
void open(
UnixSocket &unixsock,
int buffer = 512);
00321
00325
void close(
void);
00326
00330
bool operator!() const;
00331 };
00332
00343 class
UnixSession : public
UnixStream, public
Thread
00344 {
00345
protected:
00358
int waitConnection(
timeout_t timeout =
TIMEOUT_INF);
00359
00366 CCXX_MEMBER(
void) initial(
void);
00367
00373 CCXX_MEMBER(
void) final(
void)
00374 {
delete this;};
00375
public:
00385
UnixSession(
const char* pathname,
int size = 512,
int pri = 0,
int stack = 0);
00386
00396
UnixSession(
UnixSocket &server,
int size = 512,
00397
int pri = 0,
int stack = 0);
00398 };
00399
00400
#endif // ndef WIN32
00401
00402
#ifdef CCXX_NAMESPACES
00403
}
00404
#endif
00405
00406
#endif
00407
00408
00409