I let people download files using HTTP-GET from Yaws. I have implemented as it is done in yaws_appmod_dav.erl, and it works fine.
            case file:read(Fd,PPS) of
            {ok,Data} when size(Data)<PPS ->
                ?DEBUG("only chunk~n"),
                status(200,H,{content,Mimetype,Data});
            {ok,Data} ->
                ?DEBUG("first chunk~n"),
                spawn(fun() -> deliver_rest(Pid,Fd) end),
                status(200,H,{streamcontent,Mimetype,Data});
            eof ->
                status(200,{content,"application/octet-stream",<<>>});
            {error,Reason} ->
                Response = [{'D:error',[{'xmlns:D',"DAV:"}],[Reason]}],
                status(500,{xml,Response})
            end;
I would like to mark a successful download on the server, i.e. when the client has accepted the last package.
How do I do that?
A minor questions: In webdav-app for Yaws, yaws_api:stream_chunk_deliver is used instead yaws_api:stream_chunk_deliver_blocking when getting a file. (See row 449 in https://github.com/klacke/yaws/blob/master/src/yaws_appmod_dav.erl)
Why isn't this a problem? According to http://yaws.hyber.org/stream.yaws "Whenever the producer of the stream is faster than the consumer, that is the WWW client, we must use a synchronous version of the code. " I notice that both versions works fine, is it just the amount of memory on the server that is affected?