socket.hh

Go to the documentation of this file.
00001 #ifndef UTILMM_SOCKET_HH
00002 #define UTILMM_SOCKET_HH
00003 
00004 #include <boost/noncopyable.hpp>
00005 #include <string>
00006 #include <vector>
00007 
00008 namespace utilmm
00009 {
00014     class base_socket : boost::noncopyable
00015     {
00016     public:
00017         enum Domain { Unix, Inet };
00018         enum Type { Stream, Datagram };
00019         enum Wait { WaitRead = 1, WaitWrite = 2, WaitException = 4};
00020 
00021     private:
00022         static int to_unix(Domain d);
00023         static int to_unix(Type t);
00024 
00025         struct bad_address : public std::exception { };
00026 
00027         int     m_fd;
00028         Domain  m_domain;
00029         Type    m_type;
00030 
00031         int wait(int what, timeval* tv) const;
00032 
00033     protected:
00034         std::vector<uint8_t> to_sockaddr(std::string const& to) const;
00035 
00036     public:
00037         base_socket(int fd);
00038         base_socket(Domain domain, Type type);
00039 
00041         ~base_socket();
00042 
00044         int fd() const;
00045 
00051         bool try_wait(int what) const;
00052 
00057         void wait(int what) const;
00058 
00060         void flush() const;
00061     };
00062 
00067     class socket : public base_socket
00068     {
00069         friend class server_socket;
00070 
00071     public:
00073         socket(int fd);
00074 
00080         socket(Domain domain, Type type, std::string const& connect_to);
00081 
00086         void connect(std::string const& to);
00087 
00093         int read(void* buf, size_t size) const;
00094 
00100         int write(void const* buf, size_t size) const;
00101     };
00102 
00107     class server_socket : public base_socket
00108     {
00109     public:
00110         server_socket(Domain domain, Type type, std::string const& bind_to, int backlog = 256);
00111 
00112         void bind(std::string const& to);
00113 
00118         socket* accept() const;
00119 
00123         bool try_wait() const;
00124 
00126         void wait() const;
00127     };
00128 }
00129 
00130 #endif
00131 

Generated on Tue Feb 19 10:51:01 2008 for Util-- by doxygen 1.5.3
SourceForge.net Project Page