-#ifndef WIN32
+#ifdef _WIN32
+#include <winsock2.h>
+#else
#include <cerrno>
#include <unistd.h>
#include <fcntl.h>
namespace {
-#ifdef WIN32
+#ifdef _WIN32
class WinSockHelper
{
public:
priv(new Private),
local_addr(0)
{
+ mode = IO::M_RDWR;
+
priv->handle = p.handle;
SockAddr::SysAddr sa;
getsockname(priv->handle, reinterpret_cast<sockaddr *>(&sa.addr), &sa.size);
local_addr = SockAddr::new_from_sys(sa);
-#ifdef WIN32
+#ifdef _WIN32
*priv->event = CreateEvent(0, false, false, 0);
#else
*priv->event = priv->handle;
priv(new Private),
local_addr(0)
{
+ mode = IO::M_RDWR;
+
priv->handle = socket(family_to_sys(af), type, proto);
-#ifdef WIN32
+#ifdef _WIN32
*priv->event = CreateEvent(0, false, false, 0);
#else
*priv->event = priv->handle;
Socket::~Socket()
{
-#ifdef WIN32
+#ifdef _WIN32
closesocket(priv->handle);
CloseHandle(*priv->event);
#else
if(b)
mode = (mode|IO::M_NONBLOCK);
-#ifdef WIN32
+#ifdef _WIN32
u_long flag = !b;
ioctlsocket(priv->handle, FIONBIO, &flag);
#else
return priv->event;
}
-
void Socket::bind(const SockAddr &addr)
{
SockAddr::SysAddr sa = addr.to_sys();
void Socket::set_timeout(const Time::TimeDelta &timeout)
{
-#ifndef WIN32
+#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);
+#ifdef _WIN32
+ 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);
+#ifdef _WIN32
+ 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
}