System.Net.Sockets.ReceiveMessageOverlappedAsyncResult.InitIPPacketInformation C# (CSharp) Method

InitIPPacketInformation() private method

private InitIPPacketInformation ( ) : void
return void
        unsafe private void InitIPPacketInformation()
        {
            IPAddress address = null;

            if (_controlBuffer.Length == s_controlDataSize)
            {
                // IPv4
                Interop.Winsock.ControlData controlData = Marshal.PtrToStructure<Interop.Winsock.ControlData>(_message->controlBuffer.Pointer);
                if (controlData.length != UIntPtr.Zero)
                {
                    address = new IPAddress((long)controlData.address);
                }

                _ipPacketInformation = new IPPacketInformation(((address != null) ? address : IPAddress.None), (int)controlData.index);
            }
            else if (_controlBuffer.Length == s_controlDataIPv6Size)
            {
                // IPv6
                Interop.Winsock.ControlDataIPv6 controlData = Marshal.PtrToStructure<Interop.Winsock.ControlDataIPv6>(_message->controlBuffer.Pointer);
                if (controlData.length != UIntPtr.Zero)
                {
                    address = new IPAddress(controlData.address);
                }

                _ipPacketInformation = new IPPacketInformation(((address != null) ? address : IPAddress.IPv6None), (int)controlData.index);
            }
            else
            {
                // Other
                _ipPacketInformation = new IPPacketInformation();
            }
        }