Skip to content
Snippets Groups Projects
  • Andy Green's avatar
    d280b6ec
    http service break into outer loop states · d280b6ec
    Andy Green authored
    
    Previously we sat and looped to dump a file over http protocol.
    
    Actually that's a source of blocking to the other sockets being serviced.
    
    This patch breaks up the file service into a roundtrip around the poll()
    loop for each 512-byte packet.  It doesn't make much difference if the
    server is idle, but if it's busy it makes sure everyone else is getting
    service while the file is sent.
    
    It doesn't try to optimize multiple users of the file or to keep the
    descriptor open, the point of this patch is to establish the breaking up
    of the file send action into the poll loop.
    
    On the user side, there are two differences:
    
     - context is now needed in the first argument to libwebsockets_serve_http_file()
    that's not too bad since we provide context in the callback.
    
     - file send is now asynchronous to the user code, you get a new callback coming
    in protocol 0 when it's done, LWS_CALLBACK_HTTP_FILE_COMPLETION
    
    libwebsockets-test-server is updated accordingly.
    
    Signed-off-by: default avatarAndy Green <andy.green@linaro.org>
    d280b6ec
    History
    http service break into outer loop states
    Andy Green authored
    
    Previously we sat and looped to dump a file over http protocol.
    
    Actually that's a source of blocking to the other sockets being serviced.
    
    This patch breaks up the file service into a roundtrip around the poll()
    loop for each 512-byte packet.  It doesn't make much difference if the
    server is idle, but if it's busy it makes sure everyone else is getting
    service while the file is sent.
    
    It doesn't try to optimize multiple users of the file or to keep the
    descriptor open, the point of this patch is to establish the breaking up
    of the file send action into the poll loop.
    
    On the user side, there are two differences:
    
     - context is now needed in the first argument to libwebsockets_serve_http_file()
    that's not too bad since we provide context in the callback.
    
     - file send is now asynchronous to the user code, you get a new callback coming
    in protocol 0 when it's done, LWS_CALLBACK_HTTP_FILE_COMPLETION
    
    libwebsockets-test-server is updated accordingly.
    
    Signed-off-by: default avatarAndy Green <andy.green@linaro.org>