未验证 提交 caaed617 编写于 作者: T Tomas Weinfurt 提交者: GitHub

only slice SocketAddress on success operation (#90284)

* only slice SocketAddress on success operation

* null

* completed

* feedback

* feedback
上级 2b4b6b25
...@@ -475,9 +475,12 @@ protected override bool DoTryComplete(SocketAsyncContext context) ...@@ -475,9 +475,12 @@ protected override bool DoTryComplete(SocketAsyncContext context)
} }
else else
{ {
bool result = SocketPal.TryCompleteReceiveFrom(context._socket, Buffer.Span, null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode); bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, Buffer.Span, null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
SocketAddress = SocketAddress.Slice(0, socketAddressLen); if (completed && ErrorCode == SocketError.Success)
return result; {
SocketAddress = SocketAddress.Slice(0, socketAddressLen);
}
return completed;
} }
} }
} }
...@@ -508,7 +511,7 @@ private sealed class BufferListReceiveOperation : ReceiveOperation ...@@ -508,7 +511,7 @@ private sealed class BufferListReceiveOperation : ReceiveOperation
protected override bool DoTryComplete(SocketAsyncContext context) protected override bool DoTryComplete(SocketAsyncContext context)
{ {
bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, default(Span<byte>), Buffers, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode); bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, default(Span<byte>), Buffers, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
if (ErrorCode == SocketError.Success) if (completed && ErrorCode == SocketError.Success)
{ {
SocketAddress = SocketAddress.Slice(0, socketAddressLen); SocketAddress = SocketAddress.Slice(0, socketAddressLen);
} }
...@@ -542,7 +545,7 @@ private sealed unsafe class BufferPtrReceiveOperation : ReceiveOperation ...@@ -542,7 +545,7 @@ private sealed unsafe class BufferPtrReceiveOperation : ReceiveOperation
protected override bool DoTryComplete(SocketAsyncContext context) protected override bool DoTryComplete(SocketAsyncContext context)
{ {
bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, new Span<byte>(BufferPtr, Length), null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode); bool completed = SocketPal.TryCompleteReceiveFrom(context._socket, new Span<byte>(BufferPtr, Length), null, Flags, SocketAddress.Span, out int socketAddressLen, out BytesTransferred, out ReceivedFlags, out ErrorCode);
if (ErrorCode == SocketError.Success) if (completed && ErrorCode == SocketError.Success)
{ {
SocketAddress = SocketAddress.Slice(0, socketAddressLen); SocketAddress = SocketAddress.Slice(0, socketAddressLen);
} }
...@@ -569,7 +572,7 @@ private sealed class ReceiveMessageFromOperation : ReadOperation ...@@ -569,7 +572,7 @@ private sealed class ReceiveMessageFromOperation : ReadOperation
protected override bool DoTryComplete(SocketAsyncContext context) protected override bool DoTryComplete(SocketAsyncContext context)
{ {
bool completed = SocketPal.TryCompleteReceiveMessageFrom(context._socket, Buffer.Span, Buffers, Flags, SocketAddress, out int socketAddressLen, IsIPv4, IsIPv6, out BytesTransferred, out ReceivedFlags, out IPPacketInformation, out ErrorCode); bool completed = SocketPal.TryCompleteReceiveMessageFrom(context._socket, Buffer.Span, Buffers, Flags, SocketAddress, out int socketAddressLen, IsIPv4, IsIPv6, out BytesTransferred, out ReceivedFlags, out IPPacketInformation, out ErrorCode);
if (ErrorCode == SocketError.Success) if (completed && ErrorCode == SocketError.Success)
{ {
SocketAddress = SocketAddress.Slice(0, socketAddressLen); SocketAddress = SocketAddress.Slice(0, socketAddressLen);
} }
...@@ -599,7 +602,7 @@ private sealed unsafe class BufferPtrReceiveMessageFromOperation : ReadOperation ...@@ -599,7 +602,7 @@ private sealed unsafe class BufferPtrReceiveMessageFromOperation : ReadOperation
protected override bool DoTryComplete(SocketAsyncContext context) protected override bool DoTryComplete(SocketAsyncContext context)
{ {
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); 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);
if (ErrorCode == SocketError.Success) if (completed && ErrorCode == SocketError.Success)
{ {
SocketAddress = SocketAddress.Slice(0, socketAddressLen); SocketAddress = SocketAddress.Slice(0, socketAddressLen);
} }
......
...@@ -368,10 +368,7 @@ private static SocketError FinishOperationConnect() ...@@ -368,10 +368,7 @@ private static SocketError FinishOperationConnect()
private void UpdateReceivedSocketAddress(SocketAddress socketAddress) private void UpdateReceivedSocketAddress(SocketAddress socketAddress)
{ {
if (_socketAddressSize > 0) socketAddress.Size = _socketAddressSize;
{
socketAddress.Size = _socketAddressSize;
}
} }
partial void FinishOperationReceiveMessageFrom(); partial void FinishOperationReceiveMessageFrom();
......
...@@ -152,6 +152,8 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags, ...@@ -152,6 +152,8 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags,
Count = (UIntPtr)buffer.Length Count = (UIntPtr)buffer.Length
}; };
Debug.Assert(socketAddress.Length != 0 || sockAddr == null);
var messageHeader = new Interop.Sys.MessageHeader { var messageHeader = new Interop.Sys.MessageHeader {
SocketAddress = sockAddr, SocketAddress = sockAddr,
SocketAddressLen = socketAddress.Length, SocketAddressLen = socketAddress.Length,
...@@ -468,7 +470,6 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags, ...@@ -468,7 +470,6 @@ private static unsafe int SysReceive(SafeSocketHandle socket, SocketFlags flags,
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) 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)
{ {
Debug.Assert(socket.IsSocket); Debug.Assert(socket.IsSocket);
Debug.Assert(socketAddress != null, "Expected non-null socketAddress");
int cmsgBufferLen = Interop.Sys.GetControlMessageBufferSize(Convert.ToInt32(isIPv4), Convert.ToInt32(isIPv6)); int cmsgBufferLen = Interop.Sys.GetControlMessageBufferSize(Convert.ToInt32(isIPv4), Convert.ToInt32(isIPv6));
byte* cmsgBuffer = stackalloc byte[cmsgBufferLen]; byte* cmsgBuffer = stackalloc byte[cmsgBufferLen];
...@@ -484,6 +485,8 @@ private static unsafe int SysReceiveMessageFrom(SafeSocketHandle socket, SocketF ...@@ -484,6 +485,8 @@ private static unsafe int SysReceiveMessageFrom(SafeSocketHandle socket, SocketF
Count = (UIntPtr)buffer.Length Count = (UIntPtr)buffer.Length
}; };
Debug.Assert(socketAddress.Length != 0 || rawSocketAddress == null);
messageHeader = new Interop.Sys.MessageHeader { messageHeader = new Interop.Sys.MessageHeader {
SocketAddress = rawSocketAddress, SocketAddress = rawSocketAddress,
SocketAddressLen = socketAddress.Length, SocketAddressLen = socketAddress.Length,
...@@ -1234,7 +1237,7 @@ public static SocketError Receive(SafeSocketHandle handle, IList<ArraySegment<by ...@@ -1234,7 +1237,7 @@ public static SocketError Receive(SafeSocketHandle handle, IList<ArraySegment<by
} }
else else
{ {
if (!TryCompleteReceiveFrom(handle, buffers, socketFlags, null, out int _, out bytesTransferred, out _, out errorCode)) if (!TryCompleteReceiveFrom(handle, buffers, socketFlags, Span<byte>.Empty, out int _, out bytesTransferred, out _, out errorCode))
{ {
errorCode = SocketError.WouldBlock; errorCode = SocketError.WouldBlock;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册