<br>(Posted this to erlang-questions first by mistake, sorry for crossposting.)<br><br>I'm using inets http:request to construct REST calls to a web service and noticed some odd behaviour which boiled down to this: <br><br>
When
the response contains nothing, ie. complete headers, but a zero-length
body, the function hangs for some time. To try it out:
<br><br>http:request("<a href="http://combubo.com/test.txt" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://combubo.com/test.txt</a>").<br><br>The call returns after ~ 15 seconds. Other servers take minutes to break the connection.
<br><br>I located this in httpc_response.erl:
<br><br>whole_body(Body, Length) -><br>    case size(Body) of<br>    N when N < Length, N > 0-><br>        {?MODULE, whole_body, [Body, Length]};<br>    N when N >= Length, Length > 0 -><br>        %% Potential trailing garbage will be thrown away in
<br>        %% format_response/1 Some servers may send a 100-continue<br>        %% response without the client requesting it through an<br>        %% expect header in this case the trailing bytes may be<br>        %% part of the real response message.
<br>        {ok, Body};<br>    _ -><br>        {?MODULE, whole_body, [Body, Length]} <br>    end.<br><br><br><br>and it seems this code doesn't handle the case of Length == 0, so I simply changed it to:<br><br><br>case size(Body) of
<br>
    N when N < Length, N >= 0-><br>
        {?MODULE, whole_body, [Body, Length]};<br>
    N when N >= Length, Length >= 0 -><br><br><br>which seems to work fine for me, empty body responses now return right away.<br><br>Anyone know if I might have broken anything else by this patch, am I completely barking up the wrong tree?
<br><span class="sg"><br>/Tobias <br></span>