WvStreams
|
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