Exemplo n.º 1
0
 public SocketReceiver(Socket socket, PipeScheduler scheduler, bool runContinuationsAsynchronously, bool preferSynchronousCompletion) :
     base(socket, scheduler, runContinuationsAsynchronously, preferSynchronousCompletion)
 {
 }
 protected SocketSenderReceiverBase(Socket socket, PipeScheduler scheduler)
 {
     _socket             = socket;
     _awaitableEventArgs = new SocketAwaitableEventArgs(scheduler);
 }
Exemplo n.º 3
0
 public SocketSender(Socket socket, PipeScheduler scheduler) : base(socket, scheduler)
 {
 }
Exemplo n.º 4
0
        public UdpSession(Socket socket, UdpOptions options, MemoryPool <byte> memoryPool, PipeScheduler scheduler, FilterPipeline <IUdpSession> filterPipeline)
        {
            this.Id     = IdGeneratorHelper.GetNextId();
            this.socket = new UdpSocket(socket, scheduler);
            this.SettingSocket(this.socket, options);

            this.Order           = options.Order;
            this.Scheduler       = scheduler;
            this.MemoryPool      = memoryPool;
            this.filterPipeline  = filterPipeline;
            this.LocalAddress    = this.socket.BindAddress;
            this.memoryBlockSize = this.MemoryPool.MaxBufferSize;

            this.rcvPipeline = new DgramPipeline(this.MemoryPool, scheduler, OnRcvPipelineRead);
            this.sndPipeline = new DgramPipeline(this.MemoryPool, scheduler, OnSndPipelineRead);

            this.readerFlushCallback = (startPos, endPos) => { };
            this.writerFlushCallback = (writer) => { };
        }
        public InMemoryTransportConnection(MemoryPool <byte> memoryPool, ILogger logger, PipeScheduler scheduler = null)
        {
            MemoryPool = memoryPool;
            _logger    = logger;

            LocalEndPoint  = new IPEndPoint(IPAddress.Loopback, 0);
            RemoteEndPoint = new IPEndPoint(IPAddress.Loopback, 0);

            var pair = DuplexPipe.CreateConnectionPair(new PipeOptions(memoryPool, readerScheduler: scheduler, useSynchronizationContext: false), new PipeOptions(memoryPool, writerScheduler: scheduler, useSynchronizationContext: false));

            Application = pair.Application;
            var wrapper = new ObservableDuplexPipe(pair.Transport);

            Transport       = wrapper;
            WaitForReadTask = wrapper.WaitForReadTask;

            ConnectionClosed = _connectionClosedTokenSource.Token;
        }
Exemplo n.º 6
0
        public static PipeOptions GetInputPipeOptions(PipeScheduler pipeScheduler, int maxRequestBufferSize, MemoryPool <byte> memoryPool, PipeScheduler writerScheduler)
        {
            var temp = new PipeOptions();

            return(new PipeOptions
                   (

                       //TODO maxRequestBufferSize을 null로 했을 때 기본 값 들어가는지 확인 필요
                       pool: memoryPool,
                       readerScheduler: pipeScheduler,
                       writerScheduler: writerScheduler,
                       pauseWriterThreshold: maxRequestBufferSize == 0 ? temp.PauseWriterThreshold : maxRequestBufferSize,
                       resumeWriterThreshold: maxRequestBufferSize == 0 ? temp.ResumeWriterThreshold : maxRequestBufferSize,
                       useSynchronizationContext: false,
                       minimumSegmentSize: KestrelMemoryPool.MinimumSegmentSize //TODO 이 크기가 패킷의 최소 크기가 되어야 한다
                   ));
        }
Exemplo n.º 7
0
 public SocketAwaitableEventArgs(PipeScheduler ioScheduler)
 {
     _ioScheduler = ioScheduler;
 }
 internal static PipeOptions GetOutputPipeOptions(ServiceContext serviceContext, MemoryPool memoryPool, PipeScheduler readerScheduler) => new PipeOptions
 (
     pool: memoryPool,
     readerScheduler: readerScheduler,
     writerScheduler: serviceContext.ThreadPool,
     pauseWriterThreshold: GetOutputResponseBufferSize(serviceContext),
     resumeWriterThreshold: GetOutputResponseBufferSize(serviceContext)
 );
 public SocketReceiver(Socket socket, PipeScheduler scheduler) : base(socket, scheduler)
 {
 }
Exemplo n.º 10
0
 public TcpSession(Socket socket, ATcpOptions options, PipeScheduler scheduler, MemoryPool <byte> pool, FilterPipeline <ITcpSession> filterPipeline)
     : base(socket, options, scheduler, pool, filterPipeline)
 {
     this.readerFlushCallback = this.OnFilterReadFlush;
     this.writerFlushCallback = (writer) => { };
 }
Exemplo n.º 11
0
 // Internal for testing
 internal static PipeOptions GetInputPipeOptions(ServiceContext serviceContext, MemoryPool memoryPool, PipeScheduler writerScheduler) => new PipeOptions
 (
     pool: memoryPool,
     readerScheduler: serviceContext.ThreadPool,
     writerScheduler: writerScheduler,
     pauseWriterThreshold: serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0,
     resumeWriterThreshold: serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0
 );
Exemplo n.º 12
0
 public SocketReceiver(Socket socket, PipeScheduler scheduler)
 {
     _socket             = socket;
     _awaitableEventArgs = new SocketAwaitableEventArgs(scheduler);
 }
Exemplo n.º 13
0
 public SocketReceiver(PipeScheduler ioScheduler) : base(ioScheduler)
 {
 }
Exemplo n.º 14
0
        internal QuicConnection(string connectionId, Socket socket, MemoryPool <byte> memoryPool, PipeScheduler scheduler, ILogger logger)
        {
            Debug.Assert(socket != null);
            Debug.Assert(memoryPool != null);
            Debug.Assert(logger != null);

            _socket    = socket;
            MemoryPool = memoryPool;
            _scheduler = scheduler;
            _logger    = logger;

            var localEndPoint  = (IPEndPoint)_socket.LocalEndPoint;
            var remoteEndPoint = (IPEndPoint)_socket.RemoteEndPoint;

            LocalAddress = localEndPoint.Address;
            LocalPort    = localEndPoint.Port;

            RemoteAddress = remoteEndPoint.Address;
            RemotePort    = remoteEndPoint.Port;

            ConnectionClosed = _connectionClosedTokenSource.Token;

            // On *nix platforms, Sockets already dispatches to the ThreadPool.
            var awaiterScheduler = IsWindows ? _scheduler : PipeScheduler.Inline;

            _receiver = new QuicReceiver(_socket, awaiterScheduler);
            _sender   = new QuicSender(_socket, awaiterScheduler);
        }
Exemplo n.º 15
0
 public static PipeOptions GetInputPipeOptions(ServiceContext serviceContext, MemoryPool <byte> memoryPool, PipeScheduler writerScheduler) => new PipeOptions
 (
     pool: memoryPool,
     readerScheduler: serviceContext.Scheduler,
     writerScheduler: writerScheduler,
     pauseWriterThreshold: serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0,
     resumeWriterThreshold: serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0,
     useSynchronizationContext: false,
     minimumSegmentSize: memoryPool.GetMinimumSegmentSize()
 );
Exemplo n.º 16
0
 public SocketAwaitable(PipeScheduler ioScheduler)
 {
     _ioScheduler = ioScheduler;
 }
Exemplo n.º 17
0
 public static PipeOptions GetOutputPipeOptions(ServiceContext serviceContext, MemoryPool <byte> memoryPool, PipeScheduler readerScheduler) => new PipeOptions
 (
     pool: memoryPool,
     readerScheduler: readerScheduler,
     writerScheduler: serviceContext.Scheduler,
     pauseWriterThreshold: GetOutputResponseBufferSize(serviceContext),
     resumeWriterThreshold: GetOutputResponseBufferSize(serviceContext),
     useSynchronizationContext: false,
     minimumSegmentSize: memoryPool.GetMinimumSegmentSize()
 );
Exemplo n.º 18
0
 public SocketSender(PipeScheduler scheduler) : base(scheduler)
 {
 }
Exemplo n.º 19
0
        public static PipeOptions GetOutputPipeOptions(PipeScheduler pipeScheduler, int maxRequestBufferSize, MemoryPool <byte> memoryPool, PipeScheduler readerScheduler)
        {
            var temp = new PipeOptions();

            return(new PipeOptions
                   (
                       pool: memoryPool,
                       readerScheduler: readerScheduler,
                       writerScheduler: pipeScheduler,
                       pauseWriterThreshold: maxRequestBufferSize == 0 ? temp.PauseWriterThreshold : maxRequestBufferSize,
                       resumeWriterThreshold: maxRequestBufferSize == 0 ? temp.ResumeWriterThreshold : maxRequestBufferSize,
                       useSynchronizationContext: false,
                       minimumSegmentSize: KestrelMemoryPool.MinimumSegmentSize
                   ));
        }
Exemplo n.º 20
0
 public SocketReceiver(System.Net.Sockets.Socket socket, PipeScheduler scheduler) : base(socket, scheduler)
 {
 }
Exemplo n.º 21
0
 public SocketAwaitableEventArgs(PipeScheduler ioScheduler)
     : base(unsafeSuppressExecutionContextFlow: true)
 {
     _ioScheduler = ioScheduler;
 }
Exemplo n.º 22
0
 public UdpSocket(Socket socket, PipeScheduler scheduler) : base(socket, scheduler)
 {
 }