From 4dc472e207696d75c6dc1682e9fc1731d53d254a Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Thu, 24 Jan 2013 23:20:44 -0500 Subject: [PATCH] Properly handling incoming records incrementally rather than waiting for ioutil.ReadAll to work, which appeared to only happen when the remote rsyslog disconnected. --- sltcpsrv/server.go | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/sltcpsrv/server.go b/sltcpsrv/server.go index 28b51ac..b36ea40 100644 --- a/sltcpsrv/server.go +++ b/sltcpsrv/server.go @@ -1,12 +1,13 @@ package sltcpsrv import ( - "bytes" + "bufio" "flag" "fmt" - "io/ioutil" + "io" "log" "net" + "strings" ) var ( @@ -35,27 +36,22 @@ func ListenAndServe(port int) { func handleConnection(conn net.Conn) { defer conn.Close() - inbytes, err := ioutil.ReadAll(conn) - if err != nil { - log.Printf("Failed to read request body: %+v\n", err) - return - } + connBuf := bufio.NewReader(conn) - records := bytes.Split(inbytes, []byte("\n")) - nonempty := [][]byte{} + for { + line, err := connBuf.ReadString('\n') + if err != nil { + if err == io.EOF { + break + } - for _, rec := range records { - if len(rec) != 0 { - nonempty = append(nonempty, rec) + log.Printf("Failed to read line: %+v\n", err) + return } - } - - n := len(nonempty) - for i, rec := range nonempty { - msg := newMessage(rec) + msg := newMessage([]byte(strings.TrimSpace(line))) if msg != nil { - fmt.Printf("%v [%d of %d]: %+v\n", conn.RemoteAddr(), i+1, n, msg) + fmt.Printf("%v: %+v\n", conn.RemoteAddr(), msg) } } }