- check_state(true);
-
- if(size==0)
- return 0;
-
- int ret=::send(handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw Exception(format("Writing to socket failed: %s", strerror(errno)));
- }
-
- return ret;
-}
-
-unsigned Socket::do_read(char *buf, unsigned size)
-{
- check_state(true);
-
- if(size==0)
- return 0;
-
- int ret=::recv(handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw Exception(format("Reading from socket failed: %s", strerror(errno)));
- }
- else if(ret==0 && !eof_flag)
- {
- eof_flag=true;
- signal_end_of_file.emit();
- set_events(IO::P_NONE);
- }
-
- return ret;
+#ifdef WIN32
+ return getsockopt(priv->handle, level, optname, reinterpret_cast<char *>(optval), optlen);
+#else
+ return getsockopt(priv->handle, level, optname, optval, optlen);
+#endif