#ifndef WIN32
#include <cerrno>
+#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#endif
priv(new Private),
local_addr(0)
{
+ mode = IO::M_RDWR;
+
priv->handle = p.handle;
SockAddr::SysAddr sa;
priv(new Private),
local_addr(0)
{
+ mode = IO::M_RDWR;
+
priv->handle = socket(family_to_sys(af), type, proto);
#ifdef 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);
+ 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
}