You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1009 B

package sltcpsrv
import (
"bytes"
"flag"
"fmt"
"io/ioutil"
"log"
"net"
)
var (
isDebug = flag.Bool("d", false, "Turn on debugging")
)
func ListenAndServe(port int) {
ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
log.Fatal(err)
}
log.Printf("Listening on %v\n", ln.Addr())
for {
conn, err := ln.Accept()
if err != nil {
log.Printf("WARN: Failed to accept connection!: %+v\n", err)
continue
}
go handleConnection(conn)
}
}
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
}
records := bytes.Split(inbytes, []byte("\n"))
nonempty := [][]byte{}
for _, rec := range records {
if len(rec) != 0 {
nonempty = append(nonempty, rec)
}
}
n := len(nonempty)
for i, rec := range nonempty {
msg := newMessage(rec)
if msg != nil {
fmt.Printf("%v [%d of %d]: %+v\n", conn.RemoteAddr(), i+1, n, msg)
}
}
}