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 package sltcpsrv
import ( import (
"bytes" "bufio"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io"
"log" "log"
"net" "net"
"strings"
) )
var ( var (
@ -35,27 +36,22 @@ func ListenAndServe(port int) {
func handleConnection(conn net.Conn) { func handleConnection(conn net.Conn) {
defer conn.Close() defer conn.Close()
inbytes, err := ioutil.ReadAll(conn) connBuf := bufio.NewReader(conn)
for {
line, err := connBuf.ReadString('\n')
if err != nil { if err != nil {
log.Printf("Failed to read request body: %+v\n", err) if err == io.EOF {
return break
} }
records := bytes.Split(inbytes, []byte("\n")) log.Printf("Failed to read line: %+v\n", err)
nonempty := [][]byte{} return
for _, rec := range records {
if len(rec) != 0 {
nonempty = append(nonempty, rec)
}
} }
n := len(nonempty) msg := newMessage([]byte(strings.TrimSpace(line)))
for i, rec := range nonempty {
msg := newMessage(rec)
if msg != nil { 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