]> git.tdb.fi Git - libs/net.git/blobdiff - source/net/socket.cpp
Implement an asynchronous name resolver class
[libs/net.git] / source / net / socket.cpp
index 5af2b4f507e34de1a3527e1c9b99b5693441eae7..7c162178eb1a822c43d9167d741bba67131674f0 100644 (file)
@@ -1,5 +1,8 @@
-#ifndef WIN32
+#ifdef WIN32
+#include <winsock2.h>
+#else
 #include <cerrno>
+#include <unistd.h>
 #include <fcntl.h>
 #include <sys/socket.h>
 #endif
@@ -45,6 +48,8 @@ Socket::Socket(const Private &p):
        priv(new Private),
        local_addr(0)
 {
+       mode = IO::M_RDWR;
+
        priv->handle = p.handle;
 
        SockAddr::SysAddr sa;
@@ -62,6 +67,8 @@ Socket::Socket(Family af, int type, int proto):
        priv(new Private),
        local_addr(0)
 {
+       mode = IO::M_RDWR;
+
        priv->handle = socket(family_to_sys(af), type, proto);
 
 #ifdef WIN32
@@ -128,30 +135,31 @@ void Socket::set_timeout(const Time::TimeDelta &timeout)
 {
 #ifndef WIN32
        timeval tv = Time::rawtime_to_timeval(timeout.raw());
-       set_option(SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(timeval));
-       set_option(SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(timeval));
+       priv->set_option(SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(timeval));
+       priv->set_option(SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(timeval));
 #else
        DWORD msecs = static_cast<DWORD>(timeout/Time::msec);
-       set_option(SOL_SOCKET, SO_RCVTIMEO, &msecs, sizeof(DWORD));
-       set_option(SOL_SOCKET, SO_SNDTIMEO, &msecs, sizeof(DWORD));
+       priv->set_option(SOL_SOCKET, SO_RCVTIMEO, &msecs, sizeof(DWORD));
+       priv->set_option(SOL_SOCKET, SO_SNDTIMEO, &msecs, sizeof(DWORD));
 #endif
 }
 
-int Socket::set_option(int level, int optname, const void *optval, socklen_t optlen)
+
+int Socket::Private::set_option(int level, int optname, const void *optval, socklen_t optlen)
 {
 #ifdef WIN32
-       return setsockopt(priv->handle, level, optname, reinterpret_cast<const char *>(optval), optlen);
+       return setsockopt(handle, level, optname, reinterpret_cast<const char *>(optval), optlen);
 #else
-       return setsockopt(priv->handle, level, optname, optval, optlen);
+       return setsockopt(handle, level, optname, optval, optlen);
 #endif
 }
 
-int Socket::get_option(int level, int optname, void *optval, socklen_t *optlen) const
+int Socket::Private::get_option(int level, int optname, void *optval, socklen_t *optlen)
 {
 #ifdef WIN32
-       return getsockopt(priv->handle, level, optname, reinterpret_cast<char *>(optval), optlen);
+       return getsockopt(handle, level, optname, reinterpret_cast<char *>(optval), optlen);
 #else
-       return getsockopt(priv->handle, level, optname, optval, optlen);
+       return getsockopt(handle, level, optname, optval, optlen);
 #endif
 }