Skip to content

Commit caaed61

Browse files
authored
only slice SocketAddress on success operation (#90284)
* only slice SocketAddress on success operation * null * completed * feedback * feedback
1 parent 2b4b6b2 commit caaed61

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed

src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -475,9 +475,12 @@ protected override bool DoTryComplete(SocketAsyncContext context)
475475
}
476476
else
477477
{
478-
bool result = SocketPal.TryCompleteReceiveFrom(context._socket, Buffer.Span, null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
479-
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
480-
return result;
478+
bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, Buffer.Span, null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
479+
if (completed && ErrorCode == SocketError.Success)
480+
{
481+
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
482+
}
483+
return completed;
481484
}
482485
}
483486
}
@@ -508,7 +511,7 @@ public BufferListReceiveOperation(SocketAsyncContext context) : base(context) {
508511
protected override bool DoTryComplete(SocketAsyncContext context)
509512
{
510513
bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, default(Span<byte>), Buffers, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
511-
if (ErrorCode == SocketError.Success)
514+
if (completed && ErrorCode == SocketError.Success)
512515
{
513516
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
514517
}
@@ -542,7 +545,7 @@ public BufferPtrReceiveOperation(SocketAsyncContext context) : base(context) { }
542545
protected override bool DoTryComplete(SocketAsyncContext context)
543546
{
544547
bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, new Span<byte>(BufferPtr, Length), null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
545-
if (ErrorCode == SocketError.Success)
548+
if (completed && ErrorCode == SocketError.Success)
546549
{
547550
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
548551
}
@@ -569,7 +572,7 @@ public ReceiveMessageFromOperation(SocketAsyncContext context) : base(context) {
569572
protected override bool DoTryComplete(SocketAsyncContext context)
570573
{
571574
bool completed = SocketPal.TryCompleteReceiveMessageFrom(context._socket, Buffer.Span, Buffers, Flags, SocketAddress, out int socketAddressLen, IsIPv4, IsIPv6, out BytesTransferred, out ReceivedFlags, out IPPacketInformation, out ErrorCode);
572-
if (ErrorCode == SocketError.Success)
575+
if (completed && ErrorCode == SocketError.Success)
573576
{
574577
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
575578
}
@@ -599,7 +602,7 @@ public BufferPtrReceiveMessageFromOperation(SocketAsyncContext context) : base(c
599602
protected override bool DoTryComplete(SocketAsyncContext context)
600603
{
601604
bool completed = SocketPal.TryCompleteReceiveMessageFrom(context._socket, new Span<byte>(BufferPtr, Length), null, Flags, SocketAddress!, out int socketAddressLen, IsIPv4, IsIPv6, out BytesTransferred, out ReceivedFlags, out IPPacketInformation, out ErrorCode);
602-
if (ErrorCode == SocketError.Success)
605+
if (completed && ErrorCode == SocketError.Success)
603606
{
604607
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
605608
}

src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,7 @@ private static SocketError FinishOperationConnect()
368368

369369
private void UpdateReceivedSocketAddress(SocketAddress socketAddress)
370370
{
371-
if (_socketAddressSize > 0)
372-
{
373-
socketAddress.Size = _socketAddressSize;
374-
}
371+
socketAddress.Size = _socketAddressSize;
375372
}
376373

377374
partial void FinishOperationReceiveMessageFrom();

src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags,
152152
Count = (UIntPtr)buffer.Length
153153
};
154154

155+
Debug.Assert(socketAddress.Length != 0 || sockAddr == null);
156+
155157
var messageHeader = new Interop.Sys.MessageHeader {
156158
SocketAddress = sockAddr,
157159
SocketAddressLen = socketAddress.Length,
@@ -468,7 +470,6 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags,
468470
private static unsafe int SysReceiveMessageFrom(SafeSocketHandle socket, SocketFlags flags, Span<byte> buffer, Span<byte> socketAddress, out int socketAddressLen, bool isIPv4, bool isIPv6, out SocketFlags receivedFlags, out IPPacketInformation ipPacketInformation, out Interop.Error errno)
469471
{
470472
Debug.Assert(socket.IsSocket);
471-
Debug.Assert(socketAddress != null, "Expected non-null socketAddress");
472473

473474
int cmsgBufferLen = Interop.Sys.GetControlMessageBufferSize(Convert.ToInt32(isIPv4), Convert.ToInt32(isIPv6));
474475
byte* cmsgBuffer = stackalloc byte[cmsgBufferLen];
@@ -484,6 +485,8 @@ private static unsafe int SysReceiveMessageFrom(SafeSocketHandle socket, SocketF
484485
Count = (UIntPtr)buffer.Length
485486
};
486487

488+
Debug.Assert(socketAddress.Length != 0 || rawSocketAddress == null);
489+
487490
messageHeader = new Interop.Sys.MessageHeader {
488491
SocketAddress = rawSocketAddress,
489492
SocketAddressLen = socketAddress.Length,
@@ -1234,7 +1237,7 @@ public static SocketError Receive(SafeSocketHandle handle, IList<ArraySegment<by
12341237
}
12351238
else
12361239
{
1237-
if (!TryCompleteReceiveFrom(handle, buffers, socketFlags, null, out int _, out bytesTransferred, out _, out errorCode))
1240+
if (!TryCompleteReceiveFrom(handle, buffers, socketFlags, Span<byte>.Empty, out int _, out bytesTransferred, out _, out errorCode))
12381241
{
12391242
errorCode = SocketError.WouldBlock;
12401243
}

0 commit comments

Comments
 (0)