diff --git a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs index 194f9ad6fc7279..4939a70f1d21f7 100644 --- a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs +++ b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs @@ -25,16 +25,23 @@ public partial class SocketAsyncEventArgs : EventArgs, IDisposable private void AcceptCompletionCallback(IntPtr acceptedFileDescriptor, Memory socketAddress, SocketError socketError) { - CompleteAcceptOperation(acceptedFileDescriptor, socketAddress); + CompleteAcceptOperation(acceptedFileDescriptor, socketAddress, socketError); CompletionCallback(0, SocketFlags.None, socketError); } - private void CompleteAcceptOperation(IntPtr acceptedFileDescriptor, Memory socketAddress) + private void CompleteAcceptOperation(IntPtr acceptedFileDescriptor, Memory socketAddress, SocketError socketError) { _acceptedFileDescriptor = acceptedFileDescriptor; - Debug.Assert(socketAddress.Length > 0); - _acceptAddressBufferCount = socketAddress.Length; + if (socketError == SocketError.Success) + { + Debug.Assert(socketAddress.Length > 0); + _acceptAddressBufferCount = socketAddress.Length; + } + else + { + _acceptAddressBufferCount = 0; + } } internal unsafe SocketError DoOperationAccept(Socket _ /*socket*/, SafeSocketHandle handle, SafeSocketHandle? acceptHandle, CancellationToken cancellationToken) @@ -53,7 +60,7 @@ internal unsafe SocketError DoOperationAccept(Socket _ /*socket*/, SafeSocketHan if (socketError != SocketError.IOPending) { - CompleteAcceptOperation(acceptedFd, new Memory(_acceptBuffer, 0, socketAddressLen)); + CompleteAcceptOperation(acceptedFd, new Memory(_acceptBuffer, 0, socketAddressLen), socketError); FinishOperationSync(socketError, 0, SocketFlags.None); }