Properly handling incoming records incrementally

rather than waiting for ioutil.ReadAll to work, which appeared to only
happen when the remote rsyslog disconnected.
cat-town
Dan Buch 12 years ago
parent fb3009574f
commit 4dc472e207

@ -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)
}
}
}

Loading…
Cancel
Save