using System; using System.Net; using System.Net.Sockets; namespace ScreenConnect; public class SocketNetworkConnection : NetworkConnection { private Socket socket; public SocketNetworkConnection(Socket connectedSocket) { socket = connectedSocket; } public override void GetLocalAddresses(ref byte[] ipAddressBytes, ref byte[] macAddressBytes) { IPAddress address = socket.LocalEndPoint.To().Address; ipAddressBytes = address.GetAddressBytes(); macAddressBytes = ClientNetworkExtensions.GetMacAddressBytes(address); } protected override int Receive(ArraySegment buffer) { return socket.Receive(buffer.Array, buffer.Offset, buffer.Count, SocketFlags.None); } protected override void Send(ArraySegment buffer) { while (buffer.Count > 0) { int num = socket.Send(buffer.Array, buffer.Offset, buffer.Count, SocketFlags.None); if (num <= 0) { throw new SocketException(); } buffer = new ArraySegment(buffer.Array, buffer.Offset + num, buffer.Count - num); } } public override void Dispose() { socket.ShutdownAndDisposeQuietly(); } }