00001 #ifndef DV_NET_USOCKET_H 00002 #define DV_NET_USOCKET_H 00003 00004 // $Id: usocket.h,v 1.10 2008/03/14 21:47:49 dvermeir Exp $ 00005 #include <iostream> 00006 #include <dvutil/shared_ptr.h> 00007 #include <dvnet/usockstreambuf.h> 00008 00009 /** @file 00010 * This file defines the Dv::Net::Usocket class. 00011 */ 00012 namespace Dv { 00013 namespace Net { 00014 class userversocket; 00015 /** Unix socket iostream specialization. */ 00016 class usocket: public std::iostream, public DebugSlave { 00017 public: 00018 /** Open client socket on filename connected to servername. 00019 * If filename has size 0, a temporary file will be created in @a /tmp . 00020 * @param servername filename of server 00021 * @param millisecs delay 00022 * @param filename 00023 * @param min_debug_level if a debug_master is connected, logging info 00024 * will only be written if the master's level is at least @a min_debug_level 00025 * @param debug_master from where debug info will be taken 00026 * @see Dv::DebugSlave 00027 */ 00028 explicit usocket(const std::string& servername, time_t millisecs=0, 00029 const std::string& filename="", unsigned int min_debug_level = 0, 00030 Debugable* debug_master = 0); 00031 /** Construct a connection accepted by a server. The debug_threshold 00032 * and debug_master will be taken from the server. 00033 * 00034 * Upon failure or timeout, the usocket is still created, but its 00035 * failbit will be set, which can be checked as follows. 00036 * @code 00037 * usocket connection(server,10,bufsize); 00038 * if (connection) { 00039 * .. 00040 * } 00041 * @endcode 00042 * The delay (for I/O operations) of the new socket, is inherited from 00043 * the Dv::Net::userversocket. 00044 * @param srv server doing the accept 00045 * @param delay (in millisecs) that we are prepared to wait, 0 means forever. 00046 * @param bufsize of resulting socket 00047 */ 00048 usocket(userversocket& srv, time_t delay, size_t bufsize); 00049 00050 /** Construct a connection accepted by a server. 00051 * The debug_threshold and debug_master will be taken from the userversocket 00052 * @param srv server doing the accept 00053 * @param delay (in millisecs) that we are prepared to wait, 0 means forever. 00054 * @param bufsize of resulting socket 00055 * @sa Dv::Net::usocket::usocket(userversocket& srv, time_t delay, size_t bufsize) 00056 */ 00057 static shared_ptr<usocket> accept(userversocket& srv, time_t delay, size_t bufsize); 00058 /** Destructor. */ 00059 ~usocket(); 00060 /** @return filename of server. */ 00061 const std::string& servername() const { return servername_; } 00062 /** @return associated usockstreambuf object. */ 00063 usockstreambuf* rdbuf(void) const { 00064 return static_cast<usockstreambuf*>(std::istream::rdbuf()); 00065 } 00066 /** Return last system error. */ 00067 int error() const { return rdbuf()->error(); } 00068 /** @return last system error string. */ 00069 std::string strerror() const { return rdbuf()->strerror(); } 00070 private: 00071 usocket(const usocket&); 00072 usocket& operator=(const usocket&); 00073 std::string servername_; 00074 bool temp_; 00075 }; 00076 } 00077 } 00078 #endif
dvnet-0.9.24 | [ 5 December, 2009] |