]> git.tdb.fi Git - libs/net.git/blobdiff - source/socket.h
Hide platform details of Socket behind pimpl
[libs/net.git] / source / socket.h
index 5536146544c3de098993d1af06295caeecd075be..861012b8cc50c0bb2114440f0de2439fcacaa744 100644 (file)
@@ -5,21 +5,34 @@
 #include <msp/io/handle.h>
 #include "constants.h"
 #include "sockaddr.h"
-#include "types.h"
 
 namespace Msp {
 namespace Net {
 
+#ifdef WIN32
+typedef int socklen_t;
+#endif
+
+
+class bad_socket_state: public std::logic_error
+{
+public:
+       bad_socket_state(const std::string &w): std::logic_error(w) { }
+       virtual ~bad_socket_state() throw() { }
+};
+
+
 class Socket: public IO::EventObject
 {
 protected:
-       SocketHandle handle;
-       IO::Handle event;
+       struct Private;
+
+       Private *priv;
        bool connected;
        SockAddr *local_addr;
        SockAddr *peer_addr;
 
-       Socket(SocketHandle, const SockAddr &);
+       Socket(const Private &, const SockAddr &);
        Socket(Family, int, int);
 public:
        ~Socket();
@@ -37,14 +50,10 @@ public:
        type. */
        virtual int connect(const SockAddr &) = 0;
 
-       /// Closes the socket.  Most operations will throw an exception after this.
-       void close();
-
        void set_timeout(const Time::TimeDelta &);
        const SockAddr &get_local_address() const;
        const SockAddr &get_peer_address() const;
 protected:
-       void check_state(bool) const;
        int set_option(int, int, const void *, socklen_t);
        int get_option(int, int, void *, socklen_t *) const;
        unsigned do_write(const char *, unsigned);