lib/socket: clean up `native_accept` to better manage failed accept
authorAlexis Laferrière <alexis.laf@xymus.net>
Mon, 22 Dec 2014 02:36:28 +0000 (21:36 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Mon, 22 Dec 2014 04:29:01 +0000 (23:29 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/socket/socket_c.nit

index df55638..5e1db3f 100644 (file)
@@ -177,18 +177,21 @@ extern class NativeSocket `{ int* `}
                return poll_return;
        `}
 
-       private fun native_accept(addrIn: NativeSocketAddrIn): NativeSocket `{
+       private fun native_accept(addr_in: NativeSocketAddrIn): NativeSocket `{
                socklen_t s = sizeof(struct sockaddr);
-               int *d = NULL;
-               d = malloc(sizeof(int));
-               *d = accept(*recv,(struct sockaddr*)addrIn, &s);
-               return d;
+               int socket = accept(*recv, (struct sockaddr*)addr_in, &s);
+               if (socket == -1) return NULL;
+
+               int *ptr = malloc(sizeof(int));
+               *ptr = socket;
+               return ptr;
        `}
 
        fun accept: nullable SocketAcceptResult
        do
                var addrIn = new NativeSocketAddrIn
                var s = native_accept(addrIn)
+               if s.address_is_null then return null
                return new SocketAcceptResult(s, addrIn)
        end
 end