/// <deprecated> /// Not used. For reference only. /// </deprecated> private async void StartPolling1() { while (true) { var readResult = await pipeReader.ReadAsync().ConfigureAwait(false); ReadOnlySequence <byte> buffer = readResult.Buffer; SequencePosition? position = buffer.Start; var remainingBytes = buffer.Length; var writeResult = (byte)0; while (remainingBytes > 0) { while (localStackByteCount == 0) { await _tun.executeLwipTask(() => _socket.Output()); await localStackBufLock.WaitAsync().ConfigureAwait(false); } var bytesToWriteCount = Math.Min(remainingBytes, localStackByteCount); var chunk = buffer.Slice(position.Value, bytesToWriteCount); var arr = chunk.ToArray(); var more = remainingBytes != bytesToWriteCount; writeResult = await _tun.executeLwipTask(() => _socket.Send(arr, more)); if (writeResult != 0) { OnError?.Invoke(this, writeResult); pipeReader.Complete(); return; } remainingBytes -= bytesToWriteCount; position = buffer.GetPosition(bytesToWriteCount, position.Value); Interlocked.Add(ref localStackByteCount, (int)-bytesToWriteCount); } pipeReader.AdvanceTo(position.Value, position.Value); await _tun.executeLwipTask(() => _socket.Output()); if (readResult.IsCanceled || readResult.IsCompleted || writeResult != 0) { break; } } pipeReader.Complete(); await _tun.executeLwipTask(() => _socket.Close()); Debug.WriteLine($"{TcpSocket.ConnectionCount()} connections now"); LocalDisconnected = true; OnFinished(this); CheckShutdown(); }
private async void StartPolling() { localStackByteCount = await _tun.executeLwipTask(() => _socket.SendBufferSize); while (true) { var readResult = await pipeReader.ReadAsync().ConfigureAwait(false); var buffer = readResult.Buffer; if (buffer.Length == 0) { break; } ReadOnlySequence <byte> chunk = buffer.Slice(0, Math.Min(buffer.Length, localStackByteCount)); var arr = chunk.ToArray(); var more = chunk.Length == localStackByteCount; var writeResult = await _tun.executeLwipTask(() => _socket.Send(arr, more)); if (writeResult != 0) { OnError?.Invoke(this, writeResult); pipeReader.Complete(); return; } Interlocked.Add(ref localStackByteCount, (int)-chunk.Length); pipeReader.AdvanceTo(chunk.End, chunk.End); // await _tun.executeLwipTask(() => _socket.Output()); if (readResult.IsCanceled || readResult.IsCompleted || writeResult != 0) { break; } } pipeReader.Complete(); await _tun.executeLwipTask(() => _socket.Close()); Debug.WriteLine($"{TcpSocket.ConnectionCount()} connections now"); LocalDisconnected = true; OnFinished(this); CheckShutdown(); }
public virtual void Close() { _tun.executeLwipTask(() => _socket.Close()); Debug.WriteLine($"{TcpSocket.ConnectionCount()} connections now"); }
private void W_EstablishTcp(TcpSocket socket) { Debug.WriteLine($"{TcpSocket.ConnectionCount()} connections now"); // ShadowsocksR server with procotol=origin, method=none RawShadowsocksAdapter a = new RawShadowsocksAdapter("80.80.80.80", 1234, socket, this); }