Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Socket() [4/5]

unsafe System.Net.Sockets.Socket.Socket ( SafeSocketHandle handle,
bool loadPropertiesFromHandle )
inlineprivate

Definition at line 1056 of file Socket.cs.

1057 {
1058 _handle = handle;
1059 _addressFamily = AddressFamily.Unknown;
1060 _socketType = SocketType.Unknown;
1061 _protocolType = ProtocolType.Unknown;
1063 {
1064 return;
1065 }
1066 try
1067 {
1069 if (!isSocket)
1070 {
1071 return;
1072 }
1073 Span<byte> span = stackalloc byte[SocketPal.MaximumAddressSize];
1074 int nameLen = span.Length;
1075 fixed (byte* buffer = span)
1076 {
1077 if (SocketPal.GetSockName(handle, buffer, &nameLen) != 0)
1078 {
1079 return;
1080 }
1081 }
1082 System.Net.Internals.SocketAddress socketAddress = null;
1083 switch (_addressFamily)
1084 {
1085 case AddressFamily.InterNetwork:
1086 _rightEndPoint = new IPEndPoint(new IPAddress((long)System.Net.SocketAddressPal.GetIPv4Address(span.Slice(0, nameLen)) & 0xFFFFFFFFL), System.Net.SocketAddressPal.GetPort(span));
1087 break;
1088 case AddressFamily.InterNetworkV6:
1089 {
1090 Span<byte> span2 = stackalloc byte[16];
1091 System.Net.SocketAddressPal.GetIPv6Address(span.Slice(0, nameLen), span2, out var scope);
1092 _rightEndPoint = new IPEndPoint(new IPAddress(span2, scope), System.Net.SocketAddressPal.GetPort(span));
1093 break;
1094 }
1095 case AddressFamily.Unix:
1096 socketAddress = new System.Net.Internals.SocketAddress(_addressFamily, span.Slice(0, nameLen));
1097 _rightEndPoint = new UnixDomainSocketEndPoint(IPEndPointExtensions.GetNetSocketAddress(socketAddress));
1098 break;
1099 }
1100 if (_rightEndPoint == null)
1101 {
1102 return;
1103 }
1104 try
1105 {
1106 nameLen = span.Length;
1107 switch (SocketPal.GetPeerName(handle, span, ref nameLen))
1108 {
1109 case SocketError.Success:
1110 switch (_addressFamily)
1111 {
1112 case AddressFamily.InterNetwork:
1113 _remoteEndPoint = new IPEndPoint(new IPAddress((long)System.Net.SocketAddressPal.GetIPv4Address(span.Slice(0, nameLen)) & 0xFFFFFFFFL), System.Net.SocketAddressPal.GetPort(span));
1114 break;
1115 case AddressFamily.InterNetworkV6:
1116 {
1117 Span<byte> span3 = stackalloc byte[16];
1119 _remoteEndPoint = new IPEndPoint(new IPAddress(span3, scope2), System.Net.SocketAddressPal.GetPort(span));
1120 break;
1121 }
1122 case AddressFamily.Unix:
1123 socketAddress = new System.Net.Internals.SocketAddress(_addressFamily, span.Slice(0, nameLen));
1124 _remoteEndPoint = new UnixDomainSocketEndPoint(IPEndPointExtensions.GetNetSocketAddress(socketAddress));
1125 break;
1126 }
1127 _isConnected = true;
1128 break;
1129 case SocketError.InvalidArgument:
1130 _isConnected = true;
1131 break;
1132 }
1133 }
1134 catch
1135 {
1136 }
1137 }
1138 catch
1139 {
1140 _handle = null;
1141 GC.SuppressFinalize(this);
1142 throw;
1143 }
1144 }
static uint GetIPv4Address(ReadOnlySpan< byte > buffer)
static ushort GetPort(ReadOnlySpan< byte > buffer)
static void GetIPv6Address(ReadOnlySpan< byte > buffer, Span< byte > address, out uint scope)
unsafe void LoadSocketTypeFromHandle(SafeSocketHandle handle, out AddressFamily addressFamily, out SocketType socketType, out ProtocolType protocolType, out bool blocking, out bool isListening, out bool isSocket)
Definition Socket.cs:4413
SafeSocketHandle _handle
Definition Socket.cs:533
AddressFamily _addressFamily
Definition Socket.cs:555
ProtocolType _protocolType
Definition Socket.cs:559

References System.Net.Sockets.Socket._addressFamily, System.Net.Sockets.Socket._handle, System.Net.Sockets.Socket._isConnected, System.Net.Sockets.Socket._isListening, System.Net.Sockets.Socket._protocolType, System.Net.Sockets.Socket._remoteEndPoint, System.Net.Sockets.Socket._rightEndPoint, System.Net.Sockets.Socket._socketType, System.Net.Sockets.Socket._willBlockInternal, System.buffer, System.Net.SocketAddressPal.GetIPv4Address(), System.Net.SocketAddressPal.GetIPv6Address(), System.Net.Sockets.IPEndPointExtensions.GetNetSocketAddress(), System.Net.Sockets.SocketPal.GetPeerName(), System.Net.SocketAddressPal.GetPort(), System.Net.Sockets.SocketPal.GetSockName(), System.handle, System.Net.Sockets.Socket.LoadSocketTypeFromHandle(), System.Net.Sockets.SocketPal.MaximumAddressSize, and System.GC.SuppressFinalize().