+Socket::Socket(SocketHandle h, const SockAddr &paddr):
+ handle(h),
+ connected(true),
+ local_addr(0),
+ peer_addr(paddr.copy())
+{
+ sockaddr_storage sa;
+ socklen_t size = sizeof(sockaddr_storage);
+ getsockname(handle, reinterpret_cast<sockaddr *>(&sa), &size);
+ local_addr = SockAddr::create(sa);
+
+#ifdef WIN32
+ event = CreateEvent(0, false, false, 0);
+#else
+ *event = handle;
+#endif
+}
+
+Socket::Socket(Family af, int type, int proto):
+ connected(false),
+ local_addr(0),
+ peer_addr(0)
+{
+ handle = socket(af, type, proto);
+
+#ifdef WIN32
+ event = CreateEvent(0, false, false, 0);
+#else
+ *event = handle;
+#endif
+}
+
+Socket::~Socket()
+{
+ close();
+}
+