Skip to content

Commit 9fa0215

Browse files
committed
Ignore wrong responses
1 parent 95f4898 commit 9fa0215

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

src/MongoDB.Driver/Core/Connections/BinaryConnection.cs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -392,12 +392,19 @@ public ResponseMessage ReceiveMessage(
392392
try
393393
{
394394
helper.ReceivingMessage();
395-
using (var buffer = ReceiveBuffer(operationContext))
395+
while (true)
396396
{
397-
EnsureResponseToIsCorrect(buffer, responseTo);
398-
var message = helper.DecodeMessage(operationContext, buffer, encoderSelector);
399-
helper.ReceivedMessage(buffer, message);
400-
return message;
397+
using (var buffer = ReceiveBuffer(operationContext))
398+
{
399+
if (responseTo != GetResponseTo(buffer))
400+
{
401+
continue;
402+
}
403+
404+
var message = helper.DecodeMessage(operationContext, buffer, encoderSelector);
405+
helper.ReceivedMessage(buffer, message);
406+
return message;
407+
}
401408
}
402409
}
403410
catch (Exception ex)
@@ -421,12 +428,19 @@ public async Task<ResponseMessage> ReceiveMessageAsync(
421428
try
422429
{
423430
helper.ReceivingMessage();
424-
using (var buffer = await ReceiveBufferAsync(operationContext).ConfigureAwait(false))
431+
while (true)
425432
{
426-
EnsureResponseToIsCorrect(buffer, responseTo);
427-
var message = helper.DecodeMessage(operationContext, buffer, encoderSelector);
428-
helper.ReceivedMessage(buffer, message);
429-
return message;
433+
using (var buffer = await ReceiveBufferAsync(operationContext).ConfigureAwait(false))
434+
{
435+
if (responseTo != GetResponseTo(buffer))
436+
{
437+
continue;
438+
}
439+
440+
var message = helper.DecodeMessage(operationContext, buffer, encoderSelector);
441+
helper.ReceivedMessage(buffer, message);
442+
return message;
443+
}
430444
}
431445
}
432446
catch (Exception ex)
@@ -437,21 +451,10 @@ public async Task<ResponseMessage> ReceiveMessageAsync(
437451
}
438452
}
439453

440-
private IByteBuffer EnsureResponseToIsCorrect(IByteBuffer message, int responseTo)
454+
private int GetResponseTo(IByteBuffer message)
441455
{
442-
var receivedResponseTo = GetResponseTo(message);
443-
if (receivedResponseTo != responseTo)
444-
{
445-
throw new InvalidOperationException($"Expected responseTo to be {responseTo} but was {receivedResponseTo}."); // should not be reached
446-
}
447-
448-
return message;
449-
450-
int GetResponseTo(IByteBuffer message)
451-
{
452-
var backingBytes = message.AccessBackingBytes(8);
453-
return BitConverter.ToInt32(backingBytes.Array, backingBytes.Offset);
454-
}
456+
var backingBytes = message.AccessBackingBytes(8);
457+
return BitConverter.ToInt32(backingBytes.Array, backingBytes.Offset);
455458
}
456459

457460
private void SendBuffer(OperationContext operationContext, IByteBuffer buffer)

0 commit comments

Comments
 (0)