Skip to content

Commit 5a845dc

Browse files
committed
Merge branch 'bmk/esock/20240906/socket_recv_done_before_done_win/OTP-19328' into maint
2 parents 4ab35a7 + 5feb983 commit 5a845dc

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

lib/kernel/src/socket.erl

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5187,9 +5187,26 @@ recv_deadline(SockRef, Length, Flags, Deadline, Buf) ->
51875187
_ = cancel(SockRef, recv, Handle),
51885188
recv_error(Buf, timeout)
51895189
end;
5190-
%%
5191-
{ok, Bin} -> % All requested data
5190+
5191+
5192+
%% All requested data
5193+
{ok, Bin} when (Length =:= 0) orelse
5194+
(Length =:= byte_size(Bin)) -> % All requested data
51925195
{ok, condense_buffer([Bin | Buf])};
5196+
5197+
{ok, Bin} -> % Only part of the requested data
5198+
Timeout = timeout(Deadline),
5199+
if
5200+
0 < Timeout ->
5201+
%% Recv more
5202+
recv_deadline(
5203+
SockRef, Length - byte_size(Bin), Flags,
5204+
Deadline, [Bin | Buf]);
5205+
true ->
5206+
recv_error([Bin | Buf], timeout)
5207+
end;
5208+
5209+
51935210
%%
51945211
{error, Reason} ->
51955212
recv_error(Buf, Reason)

0 commit comments

Comments
 (0)