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 #include <sys/types.h>
00008 #include <stdint.h>
00009 
00010 namespace utilmm
00011 {
00016     class base_socket : boost::noncopyable
00017     {
00018     public:
00019         enum Domain { Unix, Inet };
00020         enum Type { Stream, Datagram };
00021         enum Wait { WaitRead = 1, WaitWrite = 2, WaitException = 4};
00022 
00023     private:
00024         static int to_unix(Domain d);
00025         static int to_unix(Type t);
00026 
00027         struct bad_address : public std::exception { };
00028 
00029         int     m_fd;
00030         Domain  m_domain;
00031         Type    m_type;
00032 
00033         int wait(int what, timeval* tv) const;
00034 
00035     protected:
00036         std::vector<uint8_t> to_sockaddr(std::string const& to) const;
00037 
00038     public:
00039         base_socket(int fd);
00040         base_socket(Domain domain, Type type);
00041 
00043         ~base_socket();
00044 
00046         int fd() const;
00047 
00053         bool try_wait(int what) const;
00054 
00059         void wait(int what) const;
00060 
00062         void flush() const;
00063     };
00064 
00069     class socket : public base_socket
00070     {
00071         friend class server_socket;
00072 
00073     public:
00075         socket(int fd);
00076 
00082         socket(Domain domain, Type type, std::string const& connect_to);
00083 
00088         void connect(std::string const& to);
00089 
00095         int read(void* buf, size_t size) const;
00096 
00102         int write(void const* buf, size_t size) const;
00103     };
00104 
00109     class server_socket : public base_socket
00110     {
00111     public:
00112         server_socket(Domain domain, Type type, std::string const& bind_to, int backlog = 256);
00113 
00114         void bind(std::string const& to);
00115 
00120         socket* accept() const;
00121 
00125         bool try_wait() const;
00126 
00128         void wait() const;
00129     };
00130 }
00131 
00132 #endif
00133 


utilmm
Author(s): Sylvain Joyeux/sylvain.joyeux@m4x.org
autogenerated on Wed Sep 16 2015 07:05:43