lib/socket: use less callbacks and prefer NativeString in the native layer
authorAlexis Laferrière <alexis.laf@xymus.net>
Sun, 5 Jul 2015 13:40:34 +0000 (09:40 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Fri, 17 Jul 2015 12:15:35 +0000 (08:15 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/socket/socket.nit
lib/socket/socket_c.nit

index 3cd18ff..f318dcc 100644 (file)
@@ -85,7 +85,7 @@ class TCPStream
                end
 
                addrin = new NativeSocketAddrIn.with_hostent(hostname, port)
-               address = addrin.address
+               address = addrin.address.to_s
                init(addrin.port, hostname.h_name)
 
                closed = not internal_connect
@@ -103,7 +103,7 @@ class TCPStream
                _buffer_pos = 0
                native = h.socket
                addrin = h.addr_in
-               address = addrin.address
+               address = addrin.address.to_s
 
                init(addrin.port, address)
        end
@@ -241,7 +241,7 @@ class TCPServer
                        return
                end
                addrin = new NativeSocketAddrIn.with_port(port, new NativeSocketAddressFamilies.af_inet)
-               address = addrin.address
+               address = addrin.address.to_s
 
                # Bind it
                closed = not bind
index 7930276..ea562b0 100644 (file)
@@ -258,7 +258,7 @@ extern class NativeSocketAddrIn `{ struct sockaddr_in* `}
                return sai;
        `}
 
-       fun address: String import NativeString.to_s `{ return NativeString_to_s((char*)inet_ntoa(self->sin_addr)); `}
+       fun address: NativeString `{ return (char*)inet_ntoa(self->sin_addr); `}
 
        fun family: NativeSocketAddressFamilies `{ return self->sin_family; `}
 
@@ -267,30 +267,33 @@ extern class NativeSocketAddrIn `{ struct sockaddr_in* `}
        fun destroy `{ free(self); `}
 end
 
+# Host entry information, a pointer to a `struct hostent`
 extern class NativeSocketHostent `{ struct hostent* `}
-       private fun native_h_aliases(i: Int): String import NativeString.to_s `{ return NativeString_to_s(self->h_aliases[i]); `}
-
-       private fun native_h_aliases_reachable(i: Int): Bool `{ return (self->h_aliases[i] != NULL); `}
+       private fun native_h_aliases(i: Int): NativeString `{
+               return self->h_aliases[i];
+       `}
 
+       # Alternative names for the host
        fun h_aliases: Array[String]
        do
-               var i=0
-               var d=new Array[String]
+               var res = new Array[String]
                loop
-                       d.add(native_h_aliases(i))
-                       if native_h_aliases_reachable(i+1) == false then break
-                       i += 1
+                       var ha = native_h_aliases(res.length)
+                       if ha.address_is_null then break
+                       res.add ha.to_s
                end
-               return d
+               return res
        end
 
-       fun h_addr: String import NativeString.to_s `{ return NativeString_to_s((char*)inet_ntoa(*(struct in_addr*)self->h_addr)); `}
+       fun h_addr: NativeString `{
+               return (char*)inet_ntoa(*(struct in_addr*)self->h_addr);
+       `}
 
        fun h_addrtype: Int `{ return self->h_addrtype; `}
 
        fun h_length: Int `{ return self->h_length; `}
 
-       fun h_name: String import NativeString.to_s `{ return NativeString_to_s(self->h_name); `}
+       fun h_name: NativeString `{ return self->h_name; `}
 end
 
 extern class NativeTimeval `{ struct timeval* `}