Пытаюсь использовать getsockopt() c параметром SO_BSP_STATE, используя
[DllImport("Ws2_32.dll")]
public static extern int getsockopt(IntPtr s, int level, int optname,
ref CSADDR_INFO buf, ref int optlen);
так как ожидаю получить указатель на структуру CSADDR_INFO.
[StructLayout(LayoutKind.Sequential)]
public struct SOCKADDR
{
public ushort sa_family;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)]
public char[] sa_data;
}
[StructLayout(LayoutKind.Sequential)]
public struct SOCKET_ADDRESS
{
IntPtr lpSockaddr; //SOCKADDR
int iSockaddrLength;
}
[StructLayout(LayoutKind.Sequential)]
public struct CSADDR_INFO
{
public SOCKET_ADDRESS LocalAddr;
public SOCKET_ADDRESS RemoteAddr;
public int iSocketType;
public int iProtocol;
}
Делаю это следующим образом:
CSADDR_INFO cSADDR_INFO = new CSADDR_INFO();
int optLen = Marshal.SizeOf(cSADDR_INFO);
int res=0;
res = getsockopt(s, SOL_SOCKET, SO_BSP_STATE, ref cSADDR_INFO, ref optLen);
В итоге res всегда -1, а WSAGetLastError() выдает
WSAEFAULT 10014 Bad address.
Подскажите пожалуйста, в чем может быть проблема. Если использовать char[], byte[] или IntPtr за место ref CSADDR_INFO, перед этим выделив места заведомо больше размера структуры или по размеру, выходит тоже самое. С другими параметрами, вроде SO_CONNECT_TIME, работает замечательно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
у меня есть локальная база данных создал на основе этой статьи https://docsmicrosoft
Всем приветЕсть модель MainCategory, содержащая коллекцию Categories
Попытался найти похожее, не понял всё равно как