protected internal override unsafe StreamHandle NewStream() { IntPtr loopHandle = ((uv_stream_t *)InternalHandle)->loop; var loop = HandleContext.GetTarget <LoopContext>(loopHandle); var client = new Tcp(loop); NativeMethods.StreamAccept(InternalHandle, client.InternalHandle); client.ReadStart(); #if DEBUG if (Log.DebugEnabled) { Log.Debug("{} {} client {} accepted", HandleType, InternalHandle, client.InternalHandle); } #endif return(client); }
public static Tcp Bind(this Tcp tcp, IPEndPoint localEndPoint, Action <Tcp, IStreamReadCompletion> onRead, bool dualStack = false) { if (tcp is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.tcp); } if (localEndPoint is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.localEndPoint); } if (onRead is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.onRead); } tcp.Bind(localEndPoint, dualStack); tcp.OnRead(onRead); return(tcp); }
protected internal override unsafe StreamHandle NewStream() { IntPtr loopHandle = ((uv_stream_t *)InternalHandle)->loop; var loop = HandleContext.GetTarget <LoopContext>(loopHandle); uv_handle_type type = ((uv_stream_t *)InternalHandle)->type; StreamHandle client; switch (type) { case uv_handle_type.UV_NAMED_PIPE: client = new Pipe(loop, _ipc); break; case uv_handle_type.UV_TCP: client = new Tcp(loop); break; default: throw ThrowHelper.GetInvalidOperationException_Pipe_IPC_handle_not_supported(type); } NativeMethods.StreamAccept(InternalHandle, client.InternalHandle); if (!_ipc) { client.ReadStart(); } #if DEBUG if (Log.DebugEnabled) { Log.Debug("{} {1} client {} accepted. (IPC : {})", HandleType, InternalHandle, client.InternalHandle, _ipc); } #endif return(client); }
public static Tcp Listen(this Tcp tcp, IPEndPoint localEndPoint, Action <Tcp, Exception> onConnection, int backlog = ServerStream.DefaultBacklog, bool dualStack = false) { if (tcp is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.tcp); } if (localEndPoint is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.localEndPoint); } if (onConnection is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.onConnection); } tcp.Bind(localEndPoint, dualStack); tcp.Listen(onConnection, backlog); return(tcp); }
public void QueueWriteStream(WritableBuffer writableBuffer, Tcp sendHandle, Action <Pipe, Exception> completion) => base.QueueWriteStream(writableBuffer, sendHandle, (streamHandle, exception) => completion((Pipe)streamHandle, exception));