[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MirageOS-devel] problem with NET=socket and multiple connections?



On 27 Oct 2014, at 19:02, Len Maxwell <len@xxxxxxxx> wrote:
> 
> On Fri, Oct 24, 2014 at 3:09 PM, Len Maxwell <len@xxxxxxxx> wrote:
>> Hello,
>> 
>> I am seeing some unexpected behavior with --unix and NET=socket on
>> Linux: it looks like the TCP server is not dealing well with multiple
>> connections.
>> 
> 
> Looking at the code in mirage-tcpip/unix/tcpip_stack_socket.ml, the
> listener loop does not accept the next connection until the previous
> client callback has completed.  This did not look right to me, so I
> tried the following:
> 
> --- a/unix/tcpip_stack_socket.ml
> +++ b/unix/tcpip_stack_socket.ml
> @@ -106,9 +106,12 @@ module Make(Console:V1_LWT.CONSOLE) = struct
>         if true then loop () else return_unit in
>       Lwt_unix.accept fd
>>> = fun (afd, _) ->
> -      Lwt.catch
> -        (fun () -> callback afd)
> -        (fun _ -> return_unit)
> +      Lwt.async (fun () ->
> +        Lwt.catch
> +          (fun () -> callback afd)
> +          (fun _ -> return_unit)
> +        );
> +        return_unit
>>> = fun () ->
>       continue ();
> 
> With this change, the client callback is handled in an async "thread",
> while the listener immediately loops back to accept the next
> connection.  My issues with mirage-skeleton/stackv4 and mirage-www (on
> unix/socket) seem to be resolved.
> 
> However, I'm new to OCaml/Lwt/Mirage, and not too confident this is
> the right fix.  I'd appreciate any input.

Good detective work!  That does indeed look like the right fix to me.
(The socket backend is rarely used outside of debugging, but there's
no real reason it shouldn't be -- so fixes like this are most welcome).

If you submit a pull request to mirage/mirage-tcpip I'll test and merge
it.

Welcome to OCaml/Lwt/Mirage :-)

-anil

_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.