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

◆ SetupPinHandlesSendPackets()

unsafe global.Interop.Winsock.TransmitPacketsElement[] System.Net.Sockets.SocketAsyncEventArgs.SetupPinHandlesSendPackets ( SendPacketsElement[] sendPacketsElementsCopy,
int sendPacketsElementsFileCount,
int sendPacketsElementsFileStreamCount,
int sendPacketsElementsBufferCount )
inlineprivateinherited

Definition at line 1615 of file SocketAsyncEventArgs.cs.

1616 {
1617 if (_pinState != 0)
1618 {
1620 }
1621 global::Interop.Winsock.TransmitPacketsElement[] array = GC.AllocateUninitializedArray<global::Interop.Winsock.TransmitPacketsElement>(sendPacketsElementsFileCount + sendPacketsElementsFileStreamCount + sendPacketsElementsBufferCount, pinned: true);
1623 {
1625 }
1626 int num = 0;
1627 foreach (SendPacketsElement sendPacketsElement in sendPacketsElementsCopy)
1628 {
1629 if (sendPacketsElement != null && sendPacketsElement.MemoryBuffer.HasValue && sendPacketsElement.Count > 0)
1630 {
1631 _multipleBufferMemoryHandles[num] = sendPacketsElement.MemoryBuffer.Value.Pin();
1632 num++;
1633 }
1634 }
1635 int num2 = 0;
1636 int num3 = 0;
1637 int num4 = 0;
1638 foreach (SendPacketsElement sendPacketsElement2 in sendPacketsElementsCopy)
1639 {
1640 if (sendPacketsElement2 != null)
1641 {
1642 if (sendPacketsElement2.MemoryBuffer.HasValue && sendPacketsElement2.Count > 0)
1643 {
1645 array[num3].length = (uint)sendPacketsElement2.Count;
1646 array[num3].flags = global::Interop.Winsock.TransmitPacketsElementFlags.Memory | (sendPacketsElement2.EndOfPacket ? global::Interop.Winsock.TransmitPacketsElementFlags.EndOfPacket : global::Interop.Winsock.TransmitPacketsElementFlags.None);
1647 num2++;
1648 num3++;
1649 }
1650 else if (sendPacketsElement2.FilePath != null)
1651 {
1653 array[num3].fileOffset = sendPacketsElement2.OffsetLong;
1654 array[num3].length = (uint)sendPacketsElement2.Count;
1655 array[num3].flags = global::Interop.Winsock.TransmitPacketsElementFlags.File | (sendPacketsElement2.EndOfPacket ? global::Interop.Winsock.TransmitPacketsElementFlags.EndOfPacket : global::Interop.Winsock.TransmitPacketsElementFlags.None);
1656 num4++;
1657 num3++;
1658 }
1659 else if (sendPacketsElement2.FileStream != null)
1660 {
1661 array[num3].fileHandle = sendPacketsElement2.FileStream.SafeFileHandle.DangerousGetHandle();
1662 array[num3].fileOffset = sendPacketsElement2.OffsetLong;
1663 array[num3].length = (uint)sendPacketsElement2.Count;
1664 array[num3].flags = global::Interop.Winsock.TransmitPacketsElementFlags.File | (sendPacketsElement2.EndOfPacket ? global::Interop.Winsock.TransmitPacketsElementFlags.EndOfPacket : global::Interop.Winsock.TransmitPacketsElementFlags.None);
1665 num3++;
1666 }
1667 }
1668 }
1669 _pinState = PinState.SendPackets;
1670 return array;
1671 }

References System.Net.Sockets.SocketAsyncEventArgs._multipleBufferMemoryHandles, System.Net.Sockets.SocketAsyncEventArgs._pinState, System.Net.Sockets.SocketAsyncEventArgs._sendPacketsFileHandles, System.array, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Runtime.InteropServices.SafeHandle.DangerousGetHandle(), and System.Net.Sockets.SocketAsyncEventArgs.FreePinHandles().

Referenced by System.Net.Sockets.SocketAsyncEventArgs.DoOperationSendPackets().