#ifdef HAVE_SYS_SENDFILE_H
#include <sys/sendfile.h>
#endif
+#include <sys/stat.h>
#include "w32socket.h"
#include "w32socket-internals.h"
+#include "w32error.h"
#include "w32handle.h"
#include "utils/mono-logger-internals.h"
#include "utils/mono-poll.h"
}
if ((flags & TF_DISCONNECT) == TF_DISCONNECT)
- CloseHandle (handle);
+ mono_w32handle_close (handle);
return TRUE;
}
return 0;
}
+gboolean
+mono_w32socket_close (SOCKET sock)
+{
+ return mono_w32handle_close (GINT_TO_POINTER (sock));
+}
+
gint
mono_w32socket_set_blocking (SOCKET socket, gboolean blocking)
{
+#ifdef O_NONBLOCK
gint ret;
gpointer handle;
return SOCKET_ERROR;
}
-#ifdef O_NONBLOCK
/* This works better than ioctl(...FIONBIO...)
* on Linux (it causes connect to return
* EINPROGRESS, but the ioctl doesn't seem to) */
ret = fcntl (socket, F_GETFL, 0);
if (ret != -1)
ret = fcntl (socket, F_SETFL, blocking ? (ret & (~O_NONBLOCK)) : (ret | (O_NONBLOCK)));
-#endif /* O_NONBLOCK */
if (ret == -1) {
gint errnum = errno;
}
return 0;
+#else
+ mono_w32socket_set_last_error (ERROR_NOT_SUPPORTED);
+ return SOCKET_ERROR;
+#endif /* O_NONBLOCK */
}
gint
void
mono_w32socket_set_last_error (gint32 error)
{
- SetLastError (error);
+ mono_w32error_set_last (error);
}
gint32
mono_w32socket_get_last_error (void)
{
- return GetLastError ();
+ return mono_w32error_get_last ();
}
gint32
case ENETDOWN: return WSAENETDOWN;
#endif
case ENODEV: return WSAENETDOWN;
+#ifdef EPROTOTYPE
+ case EPROTOTYPE: return WSAEPROTOTYPE;
+#endif
default:
g_error ("%s: no translation into winsock error for (%d) \"%s\"", __func__, error, g_strerror (error));
}