public static Task <TClient> AcceptAsync <TClient>(this IListener <TClient> listener) { var tcs = new TaskCompletionSource <TClient>(); #if TASK_STATUS HelperFunctions.SetStatus(tcs.Task, TaskStatus.Running); #endif try { tcs.SetResult(listener.Accept()); } catch (UVException ex) { if (ex.ErrorCode != UVErrorCode.EAGAIN) { tcs.SetException(ex); } } if (tcs.Task.IsCompleted) { return(tcs.Task); } Action <Exception, TClient> finish = null; Action connectioncb = () => { try { finish(null, listener.Accept()); } catch (Exception ex) { finish(ex, default(TClient)); } }; finish = HelperFunctions.Finish(tcs, () => { listener.Connection -= connectioncb; }); listener.Connection += connectioncb; return(tcs.Task); }
public static Task <TClient> AcceptAsync <TClient>(this IListener <TClient> listener) { var tcs = new TaskCompletionSource <TClient>(); try { tcs.SetResult(listener.Accept()); } catch (UVException ex) { if (ex.Code != (int)uv_err_code.UV_EAGAIN) { tcs.SetException(ex); } } if (tcs.Task.IsCompleted) { return(tcs.Task); } Action <Exception, TClient> finish = null; Action connectioncb = () => { try { finish(null, listener.Accept()); } catch (Exception ex) { finish(ex, default(TClient)); } }; finish = HelperFunctions.Finish(tcs, () => { listener.Connection -= connectioncb; }); listener.Connection += connectioncb; return(tcs.Task); }
public void Start(CancellationToken token) { _listener.Start(); while (true) { _logger.Log("Waiting..."); var socket = _listener.Accept(); _logger.Log("Accepted Connection."); var requestProcessor = _requestProcessorFactor.CreateProcessor(socket); var runTask = Task.Run(() => requestProcessor.Run() ); if (token.IsCancellationRequested) { break; } } }
private void HandleRequests() { ThreadPool.QueueUserWorkItem(o => { while (_listener.Running) { var acceptedSocket = _listener.Accept(); var socket = acceptedSocket as Socket; if (socket == null) return; ThreadPool.QueueUserWorkItem(sct => { try { using (var stream = new NetworkStream(socket)) { using (var reader = new StreamReader(stream)) { var request = GetRequest(reader); if (request == null) return; Respond(stream, request); } } } catch(Exception) { /* log or something in the future */ } finally { socket.Close(); } }, socket); } }); }
public ITransportConnection Accept() { var conn = _listener.Accept(); return(conn != null ? new TcpConnection(conn, _transport) : null); }
/// <summary> /// Accept waits for the next connection. /// </summary> /// <returns></returns> public Socket Accept() { return(ln.Accept()); }