#ifndef MSP_NET_SOCKET_H_
#define MSP_NET_SOCKET_H_
-#include <msp/io/base.h>
+#include <msp/io/eventobject.h>
+#include <msp/io/handle.h>
#include "constants.h"
#include "sockaddr.h"
#include "types.h"
namespace Msp {
namespace Net {
-class Socket: public IO::Base
+class Socket: public IO::EventObject
{
protected:
SocketHandle handle;
-#ifdef WIN32
IO::Handle event;
-#endif
bool connected;
SockAddr *local_addr;
SockAddr *peer_addr;
~Socket();
void set_block(bool);
- IO::Handle get_event_handle();
+ 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;
+
+ /// 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;