diff --git a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs index e1f19c03d6d0ad..817a8221d6bf0f 100644 --- a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs +++ b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs @@ -3602,7 +3602,7 @@ internal void InternalSetBlocking(bool desired) } // CreateAcceptSocket - pulls unmanaged results and assembles them into a new Socket object. - internal Socket CreateAcceptSocket(SafeSocketHandle fd, EndPoint remoteEP) + internal Socket CreateAcceptSocket(SafeSocketHandle fd, EndPoint? remoteEP) { // Internal state of the socket is inherited from listener. Debug.Assert(fd != null && !fd.IsInvalid); @@ -3610,7 +3610,7 @@ internal Socket CreateAcceptSocket(SafeSocketHandle fd, EndPoint remoteEP) return UpdateAcceptSocket(socket, remoteEP); } - internal Socket UpdateAcceptSocket(Socket socket, EndPoint remoteEP) + internal Socket UpdateAcceptSocket(Socket socket, EndPoint? remoteEP) { // Internal state of the socket is inherited from listener. socket._addressFamily = _addressFamily; 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 bcb411922ae05e..088fb07ca46d23 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 @@ -35,7 +35,6 @@ private void CompleteAcceptOperation(IntPtr acceptedFileDescriptor, Memory _acceptedFileDescriptor = acceptedFileDescriptor; if (socketError == SocketError.Success) { - Debug.Assert(socketAddress.Length > 0); _acceptAddressBufferCount = socketAddress.Length; } else @@ -348,9 +347,10 @@ private SocketError FinishOperationAccept(SocketAddress remoteSocketAddress) new ReadOnlySpan(_acceptBuffer, 0, _acceptAddressBufferCount).CopyTo(remoteSocketAddress.Buffer.Span); remoteSocketAddress.Size = _acceptAddressBufferCount; + // on macOS accept can sometimes return empty remote address even when it returns successfully. Socket acceptedSocket = _currentSocket!.CreateAcceptSocket( SocketPal.CreateSocket(_acceptedFileDescriptor), - _currentSocket._rightEndPoint!.Create(remoteSocketAddress)); + remoteSocketAddress.Size > 0 ? _currentSocket._rightEndPoint!.Create(remoteSocketAddress) : null); if (_acceptSocket is null) { // Store the accepted socket