public LibuvConnection(UvStreamHandle socket, ILibuvTrace log, LibuvThread thread, IPEndPoint remoteEndPoint, IPEndPoint localEndPoint, PipeOptions inputOptions = null, PipeOptions outputOptions = null, long?maxReadBufferSize = null, long?maxWriteBufferSize = null) { _socket = socket; LocalEndPoint = localEndPoint; RemoteEndPoint = remoteEndPoint; ConnectionClosed = _connectionClosedTokenSource.Token; Log = log; Thread = thread; maxReadBufferSize ??= 0; maxWriteBufferSize ??= 0; inputOptions ??= new PipeOptions(MemoryPool, PipeScheduler.ThreadPool, Thread, maxReadBufferSize.Value, maxReadBufferSize.Value / 2, useSynchronizationContext: false); outputOptions ??= new PipeOptions(MemoryPool, Thread, PipeScheduler.ThreadPool, maxWriteBufferSize.Value, maxWriteBufferSize.Value / 2, useSynchronizationContext: false); var pair = DuplexPipe.CreateConnectionPair(inputOptions, outputOptions); // Set the transport and connection id Transport = pair.Transport; Application = pair.Application; }
public Task StartAsync( EndPoint endPoint, LibuvThread thread) { EndPoint = endPoint; Thread = thread; return(Thread.PostAsync(listener => { listener.ListenSocket = listener.CreateListenSocket(); listener.ListenSocket.Listen(TransportContext.Options.Backlog, ConnectionCallback, listener); }, this)); }
public LibuvOutputConsumer( PipeReader pipe, LibuvThread thread, UvStreamHandle socket, string connectionId, ILibuvTrace log) { _pipe = pipe; _thread = thread; _socket = socket; _connectionId = connectionId; _log = log; }
public async Task StartAsync( string pipeName, byte[] pipeMessage, EndPoint endPoint, LibuvThread thread) { _pipeName = pipeName; _pipeMessage = pipeMessage; if (_fileCompletionInfoPtr == IntPtr.Zero) { var fileCompletionInfo = new FILE_COMPLETION_INFORMATION { Key = IntPtr.Zero, Port = IntPtr.Zero }; _fileCompletionInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(fileCompletionInfo)); Marshal.StructureToPtr(fileCompletionInfo, _fileCompletionInfoPtr, false); } await StartAsync(endPoint, thread).ConfigureAwait(false); await Thread.PostAsync(listener => listener.PostCallback(), this).ConfigureAwait(false); }
public WriteReqPool(LibuvThread thread, ILibuvTrace log) { _thread = thread; _log = log; }