Merge pull request #2619 from directhex/dont_remap_npgsql
[mono.git] / mono / metadata / socket-io.c
index 55c766fbe09c6ba032ac26563c4d43d73a6f9943..7ddf9d3e4686faa5023da5d0e7bdd947e45d8180 100644 (file)
@@ -824,6 +824,7 @@ is_ipv4_mapped_any (const struct in6_addr *addr)
 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;
@@ -834,7 +835,8 @@ create_object_from_sockaddr(struct sockaddr *saddr, int sa_size, gint32 *error)
                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) {
@@ -1747,6 +1749,7 @@ static SOCKET Socket_to_SOCKET(MonoObject *sockobj)
 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;
@@ -1851,7 +1854,8 @@ ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArray **sockets, gint32
 
        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++) {
@@ -1908,6 +1912,7 @@ ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (SOCKET sock, g
 #  endif
        socklen_t credsize = sizeof(cred);
 #endif
+       MonoError merror;
        MonoDomain *domain=mono_domain_get();
        MonoObject *obj;
        MonoClass *obj_class;
@@ -1976,15 +1981,16 @@ ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (SOCKET sock, g
                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;
@@ -2024,7 +2030,8 @@ ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (SOCKET sock, g
                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;
@@ -2196,12 +2203,12 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (SOCKET sock, gint3
                
                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);
@@ -2220,14 +2227,14 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (SOCKET sock, gint3
                                /*
                                 *      Get group address
                                 */
-                               field = mono_class_get_field_from_name (obj_val->vtable->klass, "group");
+                               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__)
@@ -2268,7 +2275,7 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (SOCKET sock, gint3
                                        mreq.imr_multiaddr = ipaddress_to_struct_in_addr (address);
                                }
 
-                               field = mono_class_get_field_from_name (obj_val->vtable->klass, "local");
+                               field = mono_class_get_field_from_name (obj_val->vtable->klass, "localAddress");
                                address = *(MonoObject **)(((char *)obj_val) + field->offset);
 
 #ifdef HAVE_STRUCT_IP_MREQN
@@ -2276,7 +2283,7 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (SOCKET sock, gint3
                                        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) {