]> git.tdb.fi Git - libs/net.git/blobdiff - source/socket.h
Add ClientSocket and ServerSocket abstractions
[libs/net.git] / source / socket.h
index dbe31512a6f677eeed424d3a12748a50d8fc87eb..38d65da40da560ba3443d81d561cd38df71cea24 100644 (file)
@@ -5,11 +5,15 @@
 #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:
@@ -21,13 +25,12 @@ public:
 class Socket: public IO::EventObject
 {
 protected:
-       SocketHandle handle;
-       IO::Handle event;
-       bool connected;
+       struct Private;
+
+       Private *priv;
        SockAddr *local_addr;
-       SockAddr *peer_addr;
 
-       Socket(SocketHandle, const SockAddr &);
+       Socket(const Private &);
        Socket(Family, int, int);
 public:
        ~Socket();
@@ -35,25 +38,15 @@ public:
        void set_block(bool);
        const IO::Handle &get_event_handle();
 
-       bool is_connected() const { return connected; }
-       
        /** Associates the socket with a local address.  There must be no existing
        users of the address. */
        void bind(const SockAddr &);
 
-       /** Connects to a remote address.  Exact semantics depend on the socket
-       type. */
-       virtual int connect(const SockAddr &) = 0;
-
        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);
-       unsigned do_read(char *, unsigned);
 };
 
 } // namespace Net