Skip to content

Commit 2b19745

Browse files
[9.0] Guard against empty Accept address (#111366)
* guard agains empty Accept address * remove assert * add comment --------- Co-authored-by: wfurt <tweinfurt@yahoo.com>
1 parent fcee4ed commit 2b19745

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3602,15 +3602,15 @@ internal void InternalSetBlocking(bool desired)
36023602
}
36033603

36043604
// CreateAcceptSocket - pulls unmanaged results and assembles them into a new Socket object.
3605-
internal Socket CreateAcceptSocket(SafeSocketHandle fd, EndPoint remoteEP)
3605+
internal Socket CreateAcceptSocket(SafeSocketHandle fd, EndPoint? remoteEP)
36063606
{
36073607
// Internal state of the socket is inherited from listener.
36083608
Debug.Assert(fd != null && !fd.IsInvalid);
36093609
Socket socket = new Socket(fd, loadPropertiesFromHandle: false);
36103610
return UpdateAcceptSocket(socket, remoteEP);
36113611
}
36123612

3613-
internal Socket UpdateAcceptSocket(Socket socket, EndPoint remoteEP)
3613+
internal Socket UpdateAcceptSocket(Socket socket, EndPoint? remoteEP)
36143614
{
36153615
// Internal state of the socket is inherited from listener.
36163616
socket._addressFamily = _addressFamily;

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ private void CompleteAcceptOperation(IntPtr acceptedFileDescriptor, Memory<byte>
3535
_acceptedFileDescriptor = acceptedFileDescriptor;
3636
if (socketError == SocketError.Success)
3737
{
38-
Debug.Assert(socketAddress.Length > 0);
3938
_acceptAddressBufferCount = socketAddress.Length;
4039
}
4140
else
@@ -348,9 +347,10 @@ private SocketError FinishOperationAccept(SocketAddress remoteSocketAddress)
348347
new ReadOnlySpan<byte>(_acceptBuffer, 0, _acceptAddressBufferCount).CopyTo(remoteSocketAddress.Buffer.Span);
349348
remoteSocketAddress.Size = _acceptAddressBufferCount;
350349

350+
// on macOS accept can sometimes return empty remote address even when it returns successfully.
351351
Socket acceptedSocket = _currentSocket!.CreateAcceptSocket(
352352
SocketPal.CreateSocket(_acceptedFileDescriptor),
353-
_currentSocket._rightEndPoint!.Create(remoteSocketAddress));
353+
remoteSocketAddress.Size > 0 ? _currentSocket._rightEndPoint!.Create(remoteSocketAddress) : null);
354354
if (_acceptSocket is null)
355355
{
356356
// Store the accepted socket

0 commit comments

Comments
 (0)