Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ DoOperationReceiveMessageFrom()

unsafe SocketError System.Net.Sockets.SocketAsyncEventArgs.DoOperationReceiveMessageFrom ( Socket socket,
SafeSocketHandle handle,
CancellationToken cancellationToken )
inlinepackageinherited

Definition at line 1280 of file SocketAsyncEventArgs.cs.

1281 {
1283 if (_wsaMessageBufferPinned == null)
1284 {
1285 _wsaMessageBufferPinned = GC.AllocateUninitializedArray<byte>(sizeof(global::Interop.Winsock.WSAMsg), pinned: true);
1286 }
1287 IPAddress iPAddress = ((_socketAddress.Family == AddressFamily.InterNetworkV6) ? _socketAddress.GetIPAddress() : null);
1288 bool flag = _currentSocket.AddressFamily == AddressFamily.InterNetwork || (iPAddress?.IsIPv4MappedToIPv6 ?? false);
1289 if (_currentSocket.AddressFamily == AddressFamily.InterNetworkV6 && (_controlBufferPinned == null || _controlBufferPinned.Length != sizeof(global::Interop.Winsock.ControlDataIPv6)))
1290 {
1291 _controlBufferPinned = GC.AllocateUninitializedArray<byte>(sizeof(global::Interop.Winsock.ControlDataIPv6), pinned: true);
1292 }
1293 else if (flag && (_controlBufferPinned == null || _controlBufferPinned.Length != sizeof(global::Interop.Winsock.ControlData)))
1294 {
1295 _controlBufferPinned = GC.AllocateUninitializedArray<byte>(sizeof(global::Interop.Winsock.ControlData), pinned: true);
1296 }
1297 WSABuffer[] wsaRecvMsgWSABufferArray;
1299 if (_bufferList == null)
1300 {
1302 {
1303 _wsaRecvMsgWSABufferArrayPinned = GC.AllocateUninitializedArray<WSABuffer>(1, pinned: true);
1304 }
1305 fixed (byte* ptr = &MemoryMarshal.GetReference(_buffer.Span))
1306 {
1312 return Core();
1313 }
1314 }
1317 return Core();
1318 unsafe SocketError Core()
1319 {
1320 global::Interop.Winsock.WSAMsg* ptr2 = (global::Interop.Winsock.WSAMsg*)(void*)Marshal.UnsafeAddrOfPinnedArrayElement(_wsaMessageBufferPinned, 0);
1321 ptr2->socketAddress = PtrSocketAddressBuffer;
1322 ptr2->addressLength = (uint)_socketAddress.Size;
1323 fixed (WSABuffer* ptr3 = &wsaRecvMsgWSABufferArray[0])
1324 {
1325 void* ptr4 = ptr3;
1326 ptr2->buffers = (IntPtr)ptr4;
1327 }
1329 if (_controlBufferPinned != null)
1330 {
1331 fixed (byte* ptr5 = &_controlBufferPinned[0])
1332 {
1333 void* ptr6 = ptr5;
1334 ptr2->controlBuffer.Pointer = (IntPtr)ptr6;
1335 }
1336 ptr2->controlBuffer.Length = _controlBufferPinned.Length;
1337 }
1338 ptr2->flags = _socketFlags;
1340 try
1341 {
1342 int bytesTransferred;
1345 }
1346 catch
1347 {
1350 throw;
1351 }
1352 }
1353 }
unsafe SocketError ProcessIOCPResult(bool success, int bytesTransferred, NativeOverlapped *overlapped)
unsafe NativeOverlapped * AllocateNativeOverlapped()
volatile AsyncProcessingState _asyncProcessingState
unsafe void FreeNativeOverlapped(NativeOverlapped *overlapped)
List< ArraySegment< byte > > _bufferListInternal
unsafe SocketError ProcessIOCPResultWithDeferredAsyncHandling(bool success, int bytesTransferred, NativeOverlapped *overlapped, Memory< byte > bufferToPin, CancellationToken cancellationToken=default(CancellationToken))
System.Net.Internals.SocketAddress _socketAddress
IList< ArraySegment< byte > > _bufferList
AddressFamily AddressFamily
Definition Socket.cs:748
static unsafe IntPtr UnsafeAddrOfPinnedArrayElement(Array arr, int index)
Definition Marshal.cs:775
unsafe Span< T > Span
Definition Memory.cs:28

References System.Net.Sockets.SocketAsyncEventArgs._asyncProcessingState, System.Net.Sockets.SocketAsyncEventArgs._buffer, System.Net.Sockets.SocketAsyncEventArgs._bufferList, System.Net.Sockets.SocketAsyncEventArgs._bufferListInternal, System.Net.Sockets.SocketAsyncEventArgs._controlBufferPinned, System.Net.Sockets.SocketAsyncEventArgs._count, System.Net.Sockets.SocketAsyncEventArgs._currentSocket, System.Net.Sockets.SocketAsyncEventArgs._offset, System.Net.Sockets.SocketAsyncEventArgs._socketAddress, System.Net.Sockets.SocketAsyncEventArgs._socketFlags, System.Net.Sockets.SocketAsyncEventArgs._wsaBufferArrayPinned, System.Net.Sockets.SocketAsyncEventArgs._wsaMessageBufferPinned, System.Net.Sockets.SocketAsyncEventArgs._wsaRecvMsgWSABufferArrayPinned, System.Net.Sockets.Socket.AddressFamily, System.Net.Sockets.SocketAsyncEventArgs.AllocateNativeOverlapped(), System.cancellationToken, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Net.Sockets.SocketAsyncEventArgs.FreeNativeOverlapped(), System.handle, System.Net.Sockets.WSABuffer.Length, System.Net.Sockets.SocketAsyncEventArgs.PinSocketAddressBuffer(), System.Net.Sockets.WSABuffer.Pointer, System.Net.Sockets.SocketAsyncEventArgs.ProcessIOCPResult(), System.Net.Sockets.SocketAsyncEventArgs.ProcessIOCPResultWithDeferredAsyncHandling(), System.Net.Sockets.SocketAsyncEventArgs.PtrSocketAddressBuffer, System.Memory< T >.Span, System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(), and System.IntPtr.Zero.

Referenced by System.Net.Sockets.Socket.ReceiveMessageFromAsync().