WvStreams
wvfdstream.h
00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * Base class for streams built on Unix file descriptors.
00006  */ 
00007 #ifndef __WVFDSTREAM_H
00008 #define __WVFDSTREAM_H
00009 
00010 #include "wvstream.h"
00011 
00020 class WvFdStream : public WvStream
00021 {
00022 protected:
00024     int rfd;
00025 
00027     int wfd;
00028     
00030     bool shutdown_read, shutdown_write;
00031 
00036     void setfd(int fd)
00037         { rfd = wfd = fd; }
00038 
00039 public:
00044     WvFdStream(int rwfd = -1);
00045     
00054     WvFdStream(int rfd, int wfd);
00055 
00057     virtual ~WvFdStream();
00058 
00063     int getrfd() const
00064         { return rfd; }
00065     
00070     int getwfd() const
00071         { return wfd; }
00072 
00081     int getfd() const
00082     {
00083         assert(rfd == wfd);
00084         return rfd;
00085     }
00086     
00088     void set_nonblock(bool nonblock);
00089     
00091     void set_close_on_exec(bool close_on_exec);
00092 
00093     /***** Overridden members *****/
00094     
00103     virtual void close();
00104     virtual bool isok() const;
00105     virtual size_t uread(void *buf, size_t count);
00106     virtual size_t uwrite(const void *buf, size_t count);
00107     virtual void pre_select(SelectInfo &si);
00108     virtual bool post_select(SelectInfo &si);
00109     virtual void maybe_autoclose();
00110 
00111 public:
00112     const char *wstype() const { return "WvFdStream"; }
00113 };
00114 
00115 typedef WvFdStream WvFDStream;
00116 
00117 #endif // __WVFDSTREAM_H