#include <mono/utils/mono-threads.h>
#include <mono/utils/mono-memory-model.h>
#include <mono/utils/networking.h>
+#include <mono/utils/w32handle.h>
#include <time.h>
#ifdef HAVE_SYS_TIME_H
MONO_EXIT_GC_SAFE;
+ if (newsock == INVALID_SOCKET)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
+ if (interrupted)
*werror = WSAEINTR;
- return NULL;
- }
- if (newsock == INVALID_SOCKET) {
- *werror = WSAGetLastError ();
+ if (*werror)
return NULL;
- }
return GUINT_TO_POINTER (newsock);
}
MONO_EXIT_GC_SAFE;
- mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
- *werror = WSAEINTR;
- return;
- }
-
if (ret == SOCKET_ERROR)
*werror = WSAGetLastError ();
+ mono_thread_info_uninstall_interrupt (&interrupted);
+ if (interrupted)
+ *werror = WSAEINTR;
+
g_free (sa);
}
MONO_ENTER_GC_SAFE;
if (_wapi_disconnectex != NULL) {
- if (!_wapi_disconnectex (sock, NULL, TF_REUSE_SOCKET, 0))
+ if (!_wapi_disconnectex (sock, NULL, reuse ? TF_REUSE_SOCKET : 0, 0))
*werror = WSAGetLastError ();
} else if (_wapi_transmitfile != NULL) {
- if (!_wapi_transmitfile (sock, NULL, 0, 0, NULL, NULL, TF_DISCONNECT | TF_REUSE_SOCKET))
+ if (!_wapi_transmitfile (sock, NULL, 0, 0, NULL, NULL, TF_DISCONNECT | (reuse ? TF_REUSE_SOCKET : 0)))
*werror = WSAGetLastError ();
} else {
*werror = ERROR_NOT_SUPPORTED;
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret == SOCKET_ERROR) {
- *werror = WSAGetLastError ();
+ if (*werror)
return 0;
- }
return ret;
}
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret == SOCKET_ERROR) {
- *werror = WSAGetLastError ();
+ if (*werror)
return 0;
- }
return recv;
}
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
- g_free (sa);
+
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret==SOCKET_ERROR) {
- g_free (sa);
- *werror = WSAGetLastError ();
+ if (*werror) {
+ g_free(sa);
return 0;
}
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret == SOCKET_ERROR) {
- *werror = WSAGetLastError ();
+ if (*werror)
return 0;
- }
return ret;
}
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret == SOCKET_ERROR) {
- *werror = WSAGetLastError ();
+ if (*werror)
return 0;
- }
-
+
return sent;
}
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
- if (interrupted) {
- g_free (sa);
+ if (interrupted)
*werror = WSAEINTR;
- return 0;
- }
- if (ret == SOCKET_ERROR)
- *werror = WSAGetLastError ();
+ g_free(sa);
+
+ if (*werror)
+ return 0;
- g_free (sa);
-
return ret;
}
int system_level = 0;
int system_name = 0;
int ret;
- int val;
+ int val = 0;
socklen_t valsize = sizeof (val);
struct linger linger;
socklen_t lingersize = sizeof (linger);
MONO_EXIT_GC_SAFE;
+ if (ret == SOCKET_ERROR)
+ *werror = WSAGetLastError ();
+
mono_thread_info_uninstall_interrupt (&interrupted);
if (interrupted) {
*werror = WSAEINTR;
- return;
}
- if (ret == SOCKET_ERROR)
- *werror = WSAGetLastError ();
}
gint
}
}
+#ifdef HOST_WIN32
+ // Win32 APIs already returns local interface addresses for empty hostname ("")
+ // so we never want to add them manually.
+ add_local_ips = FALSE;
+ if (mono_get_address_info(hostname, 0, MONO_HINT_CANONICAL_NAME | hint, &info))
+ add_info_ok = FALSE;
+#else
if (*hostname && mono_get_address_info (hostname, 0, MONO_HINT_CANONICAL_NAME | hint, &info))
add_info_ok = FALSE;
+#endif
g_free(hostname);