static void
abort_syscall (gpointer data)
{
- mono_thread_info_abort_socket_syscall_for_close ((MonoThreadInfo*) data);
+ mono_thread_info_abort_socket_syscall_for_close ((MonoNativeThreadId) (gsize) data);
}
static gint32
*error = 0;
- sock_family=convert_family(family);
+ sock_family = convert_family ((MonoAddressFamily)family);
if(sock_family==-1) {
*error = WSAEAFNOSUPPORT;
return(NULL);
}
- sock_proto=convert_proto(proto);
+ sock_proto = convert_proto ((MonoProtocolType)proto);
if(sock_proto==-1) {
*error = WSAEPROTONOSUPPORT;
return(NULL);
}
- sock_type=convert_type(type);
+ sock_type = convert_type ((MonoSocketType)type);
if(sock_type==-1) {
*error = WSAESOCKTNOSUPPORT;
return(NULL);
/* Clear any pending work item from this socket if the underlying
* polling system does not notify when the socket is closed */
mono_threadpool_ms_io_remove_socket (GPOINTER_TO_INT (sock));
+
+ MONO_PREPARE_BLOCKING;
closesocket(sock);
+ MONO_FINISH_BLOCKING;
}
gint32
*error = 0;
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return NULL;
static MonoObject*
create_object_from_sockaddr(struct sockaddr *saddr, int sa_size, gint32 *error)
{
+ MonoError merror;
MonoDomain *domain = mono_domain_get ();
MonoObject *sockaddr_obj;
MonoArray *data;
domain->sockaddr_class=mono_class_from_name (get_socket_assembly (), "System.Net", "SocketAddress");
g_assert (domain->sockaddr_class);
}
- sockaddr_obj=mono_object_new(domain, domain->sockaddr_class);
+ sockaddr_obj=mono_object_new_checked(domain, domain->sockaddr_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
/* Locate the SocketAddress data buffer in the object */
if (!domain->sockaddr_data_field) {
*error = 0;
- salen = get_sockaddr_size (convert_family (af));
+ salen = get_sockaddr_size (convert_family ((MonoAddressFamily)af));
if (salen == 0) {
*error = WSAEAFNOSUPPORT;
return NULL;
}
- sa = (salen <= 128) ? alloca (salen) : g_malloc0 (salen);
+ sa = (salen <= 128) ? (gchar *)alloca (salen) : (gchar *)g_malloc0 (salen);
MONO_PREPARE_BLOCKING;
*error = 0;
- salen = get_sockaddr_size (convert_family (af));
+ salen = get_sockaddr_size (convert_family ((MonoAddressFamily)af));
if (salen == 0) {
*error = WSAEAFNOSUPPORT;
return NULL;
}
- sa = (salen <= 128) ? alloca (salen) : g_malloc0 (salen);
+ sa = (salen <= 128) ? (gchar *)alloca (salen) : (gchar *)g_malloc0 (salen);
/* Note: linux returns just 2 for AF_UNIX. Always. */
MONO_PREPARE_BLOCKING;
mono_raise_exception (mono_exception_from_name(mono_get_corlib (), "System", "SystemException"));
}
- family = convert_family (mono_array_get (data, guint8, 0) + (mono_array_get (data, guint8, 1) << 8));
+ family = convert_family ((MonoAddressFamily)(mono_array_get (data, guint8, 0) + (mono_array_get (data, guint8, 1) << 8)));
if (family == AF_INET) {
struct sockaddr_in *sa;
guint16 port;
start = time (NULL);
do {
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
g_free (pfds);
*error = WSAEINTR;
}
if (ret == -1 && errno == EINTR) {
- if (mono_thread_test_state (thread, ThreadState_AbortRequested | ThreadState_StopRequested)) {
+ if (mono_thread_test_state (thread, (MonoThreadState)(ThreadState_AbortRequested | ThreadState_StopRequested))) {
g_free (pfds);
return FALSE;
}
LOGDEBUG (g_message("%s: connecting to %s port %d", __func__, inet_ntoa(((struct sockaddr_in *)sa)->sin_addr), ntohs (((struct sockaddr_in *)sa)->sin_port)));
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return;
* pointers to functions in managed objects that still works
* on 64bit platforms.
*/
- ret = WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, (void *)&disco_guid, sizeof(GUID),
- (void *)&_wapi_disconnectex, sizeof(void *), &output_bytes, NULL, NULL);
+ ret = WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, (gchar *)&disco_guid, sizeof(GUID),
+ (gchar *)&_wapi_disconnectex, sizeof(void *), &output_bytes, NULL, NULL);
MONO_FINISH_BLOCKING;
* For an explanation of why this is done, you can read
* the article at http://www.codeproject.com/internet/jbsocketserver3.asp
*/
- ret = WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, (void *)&trans_guid, sizeof(GUID),
- (void *)&_wapi_transmitfile, sizeof(void *), &output_bytes, NULL, NULL);
+ ret = WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER, (gchar *)&trans_guid, sizeof(GUID),
+ (gchar *)&_wapi_transmitfile, sizeof(void *), &output_bytes, NULL, NULL);
MONO_FINISH_BLOCKING;
_wapi_transmitfile = NULL;
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return;
return (0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted)
return 0;
return(0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return 0;
return (0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
g_free(sa);
*error = WSAEINTR;
return (0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return 0;
return(0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return 0;
return (0);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
g_free (sa);
*error = WSAEINTR;
void
ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArray **sockets, gint32 timeout, gint32 *error)
{
+ MonoError monoerror;
MonoInternalThread *thread = mono_thread_internal_current ();
MonoObject *obj;
mono_pollfd *pfds;
timeout = (timeout >= 0) ? (timeout / 1000) : -1;
start = time (NULL);
do {
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
g_free (pfds);
*error = WSAEINTR;
}
if (ret == -1 && errno == EINTR) {
- if (mono_thread_test_state (thread, ThreadState_AbortRequested | ThreadState_StopRequested)) {
+ if (mono_thread_test_state (thread, (MonoThreadState)(ThreadState_AbortRequested | ThreadState_StopRequested))) {
g_free (pfds);
*sockets = NULL;
return;
sock_arr_class= ((MonoObject *)*sockets)->vtable->klass;
socks_size = ((uintptr_t)ret) + 3; /* space for the NULL delimiters */
- socks = mono_array_new_full (mono_domain_get (), sock_arr_class, &socks_size, NULL);
+ socks = mono_array_new_full_checked (mono_domain_get (), sock_arr_class, &socks_size, NULL, &monoerror);
+ mono_error_raise_exception (&monoerror);
mode = idx = 0;
for (i = 0; i < count && ret > 0; i++) {
# endif
socklen_t credsize = sizeof(cred);
#endif
+ MonoError merror;
MonoDomain *domain=mono_domain_get();
MonoObject *obj;
MonoClass *obj_class;
#endif
{
- ret = convert_sockopt_level_and_name (level, name, &system_level, &system_name);
+ ret = convert_sockopt_level_and_name ((MonoSocketOptionLevel)level, (MonoSocketOptionName)name, &system_level, &system_name);
}
if(ret==-1) {
obj_class=mono_class_from_name(get_socket_assembly (),
"System.Net.Sockets",
"LingerOption");
- obj=mono_object_new(domain, obj_class);
-
+ obj=mono_object_new_checked(domain, obj_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
+
/* Locate and set the fields "bool enabled" and "int
- * seconds"
+ * lingerTime"
*/
field=mono_class_get_field_from_name(obj_class, "enabled");
*(guint8 *)(((char *)obj)+field->offset)=linger.l_onoff;
- field=mono_class_get_field_from_name(obj_class, "seconds");
+ field=mono_class_get_field_from_name(obj_class, "lingerTime");
*(guint32 *)(((char *)obj)+field->offset)=linger.l_linger;
break;
obj_class = mono_class_from_name(mono_posix_image,
"Mono.Posix",
"PeerCredData");
- obj = mono_object_new(domain, obj_class);
+ obj = mono_object_new_checked(domain, obj_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
cred_data = (MonoPeerCredData *)obj;
cred_data->pid = cred.pid;
cred_data->uid = cred.uid;
*error = 0;
- ret=convert_sockopt_level_and_name(level, name, &system_level,
+ ret=convert_sockopt_level_and_name((MonoSocketOptionLevel)level, (MonoSocketOptionName)name, &system_level,
&system_name);
if(ret==-1) {
*error = WSAENOPROTOOPT;
sol_ipv6 = mono_networking_get_ipv6_protocol ();
sol_ip = mono_networking_get_ip_protocol ();
- ret=convert_sockopt_level_and_name(level, name, &system_level,
+ ret=convert_sockopt_level_and_name((MonoSocketOptionLevel)level, (MonoSocketOptionName)name, &system_level,
&system_name);
#if !defined(SO_EXCLUSIVEADDRUSE) && defined(SO_REUSEADDR)
switch(name) {
case SocketOptionName_Linger:
- /* Dig out "bool enabled" and "int seconds"
+ /* Dig out "bool enabled" and "int lingerTime"
* fields
*/
field=mono_class_get_field_from_name(obj_val->vtable->klass, "enabled");
linger.l_onoff=*(guint8 *)(((char *)obj_val)+field->offset);
- field=mono_class_get_field_from_name(obj_val->vtable->klass, "seconds");
+ field=mono_class_get_field_from_name(obj_val->vtable->klass, "lingerTime");
linger.l_linger=*(guint32 *)(((char *)obj_val)+field->offset);
valsize=sizeof(linger);
/*
* Get group address
*/
- field = mono_class_get_field_from_name (obj_val->vtable->klass, "group");
- address = *(gpointer *)(((char *)obj_val) + field->offset);
+ field = mono_class_get_field_from_name (obj_val->vtable->klass, "m_Group");
+ address = *(MonoObject **)(((char *)obj_val) + field->offset);
if(address) {
mreq6.ipv6mr_multiaddr = ipaddress_to_struct_in6_addr (address);
}
- field=mono_class_get_field_from_name(obj_val->vtable->klass, "ifIndex");
+ field=mono_class_get_field_from_name(obj_val->vtable->klass, "m_Interface");
mreq6.ipv6mr_interface =*(guint64 *)(((char *)obj_val)+field->offset);
#if defined(__APPLE__) || defined(__FreeBSD__)
* those :-(
*/
field = mono_class_get_field_from_name (obj_val->vtable->klass, "group");
- address = *(gpointer *)(((char *)obj_val) + field->offset);
+ address = *(MonoObject **)(((char *)obj_val) + field->offset);
/* address might not be defined and if so, set the address to ADDR_ANY.
*/
mreq.imr_multiaddr = ipaddress_to_struct_in_addr (address);
}
- field = mono_class_get_field_from_name (obj_val->vtable->klass, "local");
- address = *(gpointer *)(((char *)obj_val) + field->offset);
+ field = mono_class_get_field_from_name (obj_val->vtable->klass, "localAddress");
+ address = *(MonoObject **)(((char *)obj_val) + field->offset);
#ifdef HAVE_STRUCT_IP_MREQN
if(address) {
mreq.imr_address = ipaddress_to_struct_in_addr (address);
}
- field = mono_class_get_field_from_name(obj_val->vtable->klass, "iface_index");
+ field = mono_class_get_field_from_name(obj_val->vtable->klass, "ifIndex");
mreq.imr_ifindex = *(gint32 *)(((char *)obj_val)+field->offset);
#else
if(address) {
*error = 0;
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
*error = WSAEINTR;
return;
buffers.TailLength = mono_array_length (post_buffer);
}
- mono_thread_info_install_interrupt (abort_syscall, mono_thread_info_current (), &interrupted);
+ mono_thread_info_install_interrupt (abort_syscall, (gpointer) (gsize) mono_native_thread_id_get (), &interrupted);
if (interrupted) {
CloseHandle (file);
SetLastError (WSAEINTR);
icall_cancel_blocking_socket_operation (MonoThread *thread)
{
MonoInternalThread *internal;
- MonoThreadInfo *info;
internal = thread->internal_thread;
g_assert (internal);
- info = mono_thread_info_lookup (MONO_UINT_TO_NATIVE_THREAD_ID (internal->tid));
- g_assert (info);
-
- mono_thread_info_abort_socket_syscall_for_close (info);
+ mono_thread_info_abort_socket_syscall_for_close (MONO_UINT_TO_NATIVE_THREAD_ID (internal->tid));
}
#endif /* #ifndef DISABLE_SOCKETS */