From 836d3b2bda756ffd782e69707dbcac3bcfa617bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Sun, 14 Aug 2016 12:00:12 +0200 Subject: [PATCH] half-close all connections supporting `CloseWrite() error` Usecase: support TCP and UNIX connections, support "wrapped" connections (peek first bytes to support multiple protocols on one listening socket). --- request.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/request.go b/request.go index e3eebff..7a636cc 100644 --- a/request.go +++ b/request.go @@ -340,11 +340,15 @@ func sendReply(w io.Writer, resp uint8, addr *AddrSpec) error { return err } +type closeWriter interface { + CloseWrite() error +} + // proxy is used to suffle data from src to destination, and sends errors // down a dedicated channel func proxy(dst io.Writer, src io.Reader, errCh chan error) { _, err := io.Copy(dst, src) - if tcpConn, ok := dst.(*net.TCPConn); ok { + if tcpConn, ok := dst.(closeWriter); ok { tcpConn.CloseWrite() } errCh <- err