private void IPEndPointToNative(IPEndPoint endPoint, out rtl.SOCKADDR_IN lIPv4, out sockaddr_in6 lIPv6, out void *ipPointer, out int ipSize) { switch (endPoint.AddressFamily) { case AddressFamily.InterNetworkV6: lIPv6.sin6_family = AddressFamily.InterNetworkV6; lIPv6.sin6_port = rtl.htons(endPoint.Port); lIPv6.sin6_scope_id = endPoint.Address.ScopeId; var lBytes = endPoint.Address.GetAddressBytes(); for (int i = 0; i < 16; i++) { lIPv6.sin6_addr.u.Byte[i] = lBytes[i]; } ipPointer = &lIPv6; ipSize = sizeof(sockaddr_in6); break; default: lIPv4.sin_family = AddressFamily.InterNetwork; lIPv4.sin_port = rtl.htons(endPoint.Port); lIPv4.sin_addr.S_un.S_addr = endPoint.Address.Address; ipSize = sizeof(rtl.SOCKADDR_IN); ipPointer = &lIPv4; break; } }
private void IPEndPointToNative(IPEndPoint endPoint, out rtl.SOCKADDR_IN lIPv4, out sockaddr_in6 lIPv6, out void *ipPointer, out int ipSize) #endif { switch (endPoint.AddressFamily) { case AddressFamily.InterNetworkV6: lIPv6.sin6_family = AddressFamily.InterNetworkV6; #if toffee lIPv6.sin6_port = htons(endPoint.Port); #else lIPv6.sin6_port = rtl.htons(endPoint.Port); #endif lIPv6.sin6_scope_id = endPoint.Address.ScopeId; var lBytes = endPoint.Address.GetAddressBytes(); for (int i = 0; i < 16; i++) #if toffee { lIPv6.sin6_addr.__u6_addr.__u6_addr8[i] = lBytes[i]; } #elif posix { lIPv6.sin6_addr.__in6_u.__u6_addr8[i] = lBytes[i]; } #else { lIPv6.sin6_addr.u.Byte[i] = lBytes[i]; } #endif ipPointer = &lIPv6; #if posix || toffee ipSize = sizeof(rtl.__struct_sockaddr_in6); #else ipSize = sizeof(sockaddr_in6); #endif break; default: lIPv4.sin_family = AddressFamily.InterNetwork; #if toffee lIPv4.sin_port = htons(endPoint.Port); #else lIPv4.sin_port = rtl.htons(endPoint.Port); #endif #if posix || toffee lIPv4.sin_addr.s_addr = endPoint.Address.Address; ipSize = sizeof(rtl.__struct_sockaddr_in); #else lIPv4.sin_addr.S_un.S_addr = endPoint.Address.Address; ipSize = sizeof(rtl.SOCKADDR_IN); #endif ipPointer = &lIPv4; break; } }