internal static unsafe void GetSockaddrInet(IPEndPointStruct inetAddress, sockaddr_storage *addr, out int length) { if (inetAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { sockaddr_in *addrIn = (sockaddr_in *)addr; addrIn->sin_family = AF_INET; addrIn->sin_port = htons((ushort)inetAddress.Port); int bytesWritten; inetAddress.Address.TryWriteBytes(new Span <byte>(addrIn->sin_addr.s_addr, 4), out bytesWritten); length = SizeOf.sockaddr_in; } else if (inetAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { sockaddr_in6 *addrIn = (sockaddr_in6 *)addr; addrIn->sin6_family = AF_INET6; addrIn->sin6_port = htons((ushort)inetAddress.Port); addrIn->sin6_flowinfo = 0; addrIn->sin6_scope_id = 0; int bytesWritten; inetAddress.Address.TryWriteBytes(new Span <byte>(addrIn->sin6_addr.s6_addr, 16), out bytesWritten); length = SizeOf.sockaddr_in6; } else { length = 0; } }
public SOCKADDR_STORAGE get_sockaddr_storage(socklen_t *len = NULL) { SOCKADDR_STORAGE sa; const byte family = get_family(); if (family == AF_INET) { sockaddr_in *sin = (sockaddr_in *)&sa; if (len) { *len = sizeof(sockaddr_in); } memset(sin, 0, sizeof(sockaddr_in)); sin.sin_family = family; sin.sin_port = htons(_port); sin.sin_addr.s_addr = _sin4; } else { sockaddr_in6 *sin6 = (sockaddr_in6 *)&sa; memset(sin6, 0, sizeof(sockaddr_in6)); if (len) { *len = sizeof(sockaddr_in6); } sin6.sin6_family = family; sin6.sin6_addr = _in._in6addr; sin6.sin6_port = htons(_port); } return(sa); }
private static unsafe bool ToIPEndPointStruct(sockaddr_storage *addr, out IPEndPointStruct ep, IPAddress reuseAddress = null) { if (addr->ss_family == AF_INET) { sockaddr_in *addrIn = (sockaddr_in *)addr; long value = ((addrIn->sin_addr.s_addr[3] << 24 | addrIn->sin_addr.s_addr[2] << 16 | addrIn->sin_addr.s_addr[1] << 8 | addrIn->sin_addr.s_addr[0]) & 0x0FFFFFFFF); #pragma warning disable CS0618 // 'IPAddress.Address' is obsolete bool matchesReuseAddress = reuseAddress != null && reuseAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && reuseAddress.Address == value; #pragma warning restore CS0618 int port = ntohs(addrIn->sin_port); ep = new IPEndPointStruct(matchesReuseAddress ? reuseAddress : new IPAddress(value), port); return(true); } else if (addr->ss_family == AF_INET6) { sockaddr_in6 *addrIn = (sockaddr_in6 *)addr; // We can't check if we can use reuseAddress without allocating. const int length = 16; var bytes = new byte[length]; for (int i = 0; i < length; i++) { bytes[i] = addrIn->sin6_addr.s6_addr[i]; } int port = ntohs(addrIn->sin6_port); ep = new IPEndPointStruct(new IPAddress(bytes, addrIn->sin6_scope_id), port); return(true); } else { ep = default(IPEndPointStruct); return(false); } }
public static unsafe IPEndPoint AddrToIpEndPoint(sockaddr_storage *addr) { if (addr->ss_family == AF_INET) { sockaddr_in *addrIn = (sockaddr_in *)addr; long value = ((addrIn->sin_addr.s_addr[3] << 24 | addrIn->sin_addr.s_addr[2] << 16 | addrIn->sin_addr.s_addr[1] << 8 | addrIn->sin_addr.s_addr[0]) & 0x0FFFFFFFF); int port = ntohs(addrIn->sin_port); return(new IPEndPoint(new IPAddress(value), port)); } if (addr->ss_family == AF_INET6) { sockaddr_in6 *addrIn = (sockaddr_in6 *)addr; // We can't check if we can use reuseAddress without allocating. const int length = 16; var bytes = new byte[length]; for (int i = 0; i < length; i++) { bytes[i] = addrIn->sin6_addr.s6_addr[i]; } int port = ntohs(addrIn->sin6_port); return(new IPEndPoint(new IPAddress(bytes, addrIn->sin6_scope_id), port)); } throw new NotSupportedException(); }
public static unsafe void ToSockAddr(this IPEndPoint ipEndPoint, sockaddr_storage *addr, out int length) { if (ipEndPoint.AddressFamily == AddressFamily.InterNetwork) { sockaddr_in *addrIn = (sockaddr_in *)addr; addrIn->sin_family = AF_INET; addrIn->sin_port = htons((ushort)ipEndPoint.Port); int bytesWritten; ipEndPoint.Address.TryWriteBytes(new Span <byte>(addrIn->sin_addr.s_addr, 4), out bytesWritten); length = SizeOf.sockaddr_in; } else if (ipEndPoint.AddressFamily == AddressFamily.InterNetworkV6) { sockaddr_in6 *addrIn = (sockaddr_in6 *)addr; addrIn->sin6_family = AF_INET6; addrIn->sin6_port = htons((ushort)ipEndPoint.Port); addrIn->sin6_flowinfo = 0; addrIn->sin6_scope_id = 0; int bytesWritten; ipEndPoint.Address.TryWriteBytes(new Span <byte>(addrIn->sin6_addr.s6_addr, 16), out bytesWritten); length = SizeOf.sockaddr_in6; } else { length = 0; } }
public static unsafe IPEndPoint AddrToIpEndPoint(sockaddr_storage *addr) { if (addr->ss_family == AF_INET) { sockaddr_in *addrIn = (sockaddr_in *)addr; long value = ((addrIn->sin_addr.s_addr[3] << 24 | addrIn->sin_addr.s_addr[2] << 16 | addrIn->sin_addr.s_addr[1] << 8 | addrIn->sin_addr.s_addr[0]) & 0x0FFFFFFFF); int port = ntohs(addrIn->sin_port); return(new IPEndPoint(new IPAddress(value), port)); } else if (addr->ss_family == AF_INET6) { sockaddr_in6 *addrIn = (sockaddr_in6 *)addr; Span <byte> bytes = stackalloc byte[16]; for (int i = 0; i < bytes.Length; i++) { bytes[i] = addrIn->sin6_addr.s6_addr[i]; } int port = ntohs(addrIn->sin6_port); return(new IPEndPoint(new IPAddress(bytes, addrIn->sin6_scope_id), port)); } else { ThrowHelper.ThrowNewNotSupportedException_AddressFamilyNotSupported(); return(null); } }
public int sceNetInetSendto(int SocketId, void *BufferPointer, int BufferLength, SocketFlags SocketFlags, sockaddr_in *To, socklen_t ToLength) { var Socket = Sockets.Get(SocketId); return(Socket.SendTo(ArrayUtils.CreateArray <byte>(BufferPointer, BufferLength), SocketFlags, new IPEndPoint(To->sin_addr.Address, To->sin_port))); }
public int sceNetInetConnect(int SocketId, sockaddr_in *serv_addr, socklen_t addrlen) { var Socket = Sockets.Get(SocketId); Console.WriteLine("{0}", serv_addr->sin_addr); Socket.Connect(new IPEndPoint(serv_addr->sin_addr.Address, serv_addr->sin_port)); return(0); }
public int sceNetInetRecvfrom(int SocketId, void *BufferPointer, int BufferLength, SocketFlags SocketFlags, sockaddr_in *From, socklen_t *FromLength) { var Socket = Sockets.Get(SocketId); EndPoint EndPoint = new IPEndPoint(From->sin_addr.Address, From->sin_port); return(Socket.ReceiveFrom(ArrayUtils.CreateArray <byte>(BufferPointer, BufferLength), SocketFlags, ref EndPoint)); }
private static unsafe void EndPoint4ToSockAddr(IPEndPoint inetAddress, sockaddr_storage *addr, out int length) { sockaddr_in *addrIn = (sockaddr_in *)addr; addrIn->sin_family = AF_INET; addrIn->sin_port = htons((ushort)inetAddress.Port); inetAddress.Address.TryWriteBytes(new Span <byte>(addrIn->sin_addr.s_addr, 4), out _); length = SizeOf.sockaddr_in; }
void set(SOCKADDR_STORAGE *sa, socklen_t len) { if (sa.ss_family == AF_INET) { assert(len >= sizeof(sockaddr_in)); const sockaddr_in *sin = (sockaddr_in *)sa; _sin6w[0] = 0; _sin6w[1] = 0; _sin6w[2] = 0; _sin6w[3] = 0; _sin6w[4] = 0; _sin6w[5] = 0xffff; _sin4 = sin.sin_addr.s_addr; _port = ntohs(sin.sin_port); } else { assert(len >= sizeof(sockaddr_in6)); const sockaddr_in6 *sin6 = (sockaddr_in6 *)sa; _in._in6addr = sin6.sin6_addr; _port = ntohs(sin6.sin6_port); } }
public static unsafe extern int getpeername(IntPtr SocketHandle, sockaddr_in *addr, int *addrsize);