SOCKADDR (Structures)
Last changed: -194.176.224.41

.
Summary
TODO - a short description

C# Definition:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct sockaddr
    {
        internal EnumLib.ADDRESS_FAMILIES sa_family;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] internal String sa_data;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal unsafe struct sockaddr_UNSAFE
    {
        internal EnumLib.ADDRESS_FAMILIES sa_family;
        internal fixed char sa_data [14];

        internal string Name
        {
        get
        {
            var result = string.Empty;
            fixed (char* str = sa_data)
            {
            result = new string(str);
            }
            return result;
        }
        }
    }

Notes:

None.

Conversion of an IntPtr pointing to a sockaddr structure to an IPAddress:

    public enum SockAddrFamily
    {
      Inet = 2,
      Inet6 = 23
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct SockAddr
    {
      public ushort Family;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)]
      public byte[] Data;
    };

    [StructLayout(LayoutKind.Sequential)]
    public struct SockAddrIn
    {
      public ushort Family;
      public ushort Port;
      public uint Addr;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
      public byte[] Zero;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct SockAddrIn6
    {
      public ushort Family;
      public ushort Port;
      public uint FlowInfo;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
      public byte[] Addr;
      public uint ScopeId;
    };

    public IPAddress ConvertSockAddrPtrToIPAddress(IntPtr sockAddrPtr)
    {
      SockAddr sockAddr = (SockAddr)Marshal.PtrToStructure(sockAddrPtr, typeof(SockAddr));
      switch ((SockAddrFamily)sockAddr.Family)
      {
        case SockAddrFamily.Inet:
        {
          SockAddrIn sockAddrIn = (SockAddrIn)Marshal.PtrToStructure(sockAddrPtr, typeof(SockAddrIn));
          return new IPAddress(sockAddrIn.Addr);
        }
        case SockAddrFamily.Inet6:
        {
          SockAddrIn6 sockAddrIn6 = (SockAddrIn6)Marshal.PtrToStructure(sockAddrPtr, typeof(SockAddrIn6));
          return new IPAddress(sockAddrIn6.Addr);
        }
        default:
          throw new Exception(string.Format("Non-IP address family: {0}", sockAddr.Family));
      }
    }

Source
Documentation
SOCKADDR on MSDN