protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var endpoint = new UnixDomainSocketEndPoint(this.providerUri.LocalPath); using (Socket socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified)) { Events.Connecting(this.providerUri.LocalPath); await socket.ConnectAsync(endpoint); Events.Connected(this.providerUri.LocalPath); using (var stream = new HttpBufferedStream(new NetworkStream(socket, true))) { var serializer = new HttpRequestResponseSerializer(); byte[] requestBytes = serializer.SerializeRequest(request); Events.SendRequest(request.RequestUri); await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken); if (request.Content != null) { await request.Content.CopyToAsync(stream); } HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken); Events.ResponseReceived(response.StatusCode); return(response); } } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var endpoint = new UnixDomainSocketEndPoint(this.providerUri.LocalPath); Events.Connecting(this.providerUri.LocalPath); // do not dispose `Socket` or `HttpBufferedStream` here, b/c it will be used later // by the consumer of HttpResponseMessage (HttpResponseMessage.Content.ReadAsStringAsync()). // When HttpResponseMessage is disposed - the stream and socket is disposed as well. Socket socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified); await socket.ConnectAsync(endpoint); Events.Connected(this.providerUri.LocalPath); var stream = new HttpBufferedStream(new NetworkStream(socket, true)); var serializer = new HttpRequestResponseSerializer(); byte[] requestBytes = serializer.SerializeRequest(request); Events.SendRequest(request.RequestUri); await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken); if (request.Content != null) { await request.Content.CopyToAsync(stream); } HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken); Events.ResponseReceived(response.StatusCode); return(response); }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Socket socket = await this.GetConnectedSocketAsync(); var stream = new HttpBufferedStream(new NetworkStream(socket, true)); var serializer = new HttpRequestResponseSerializer(); byte[] requestBytes = serializer.SerializeRequest(request); await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken); if (request.Content != null) { await request.Content.CopyToAsync(stream); } HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken); return(response); }