Skip to content

Instantly share code, notes, and snippets.

@momchil-velikov
Created April 1, 2016 11:40
Show Gist options
  • Save momchil-velikov/a218002661956b89947d24cbe9a7eb8b to your computer and use it in GitHub Desktop.
Save momchil-velikov/a218002661956b89947d24cbe9a7eb8b to your computer and use it in GitHub Desktop.
package main
import (
"crypto/sha256"
"fmt"
"io"
"log"
"net"
"sync/atomic"
"time"
)
var (
conns uint64
pkts uint64
)
func printStatistics() {
started := time.Now().Unix()
for {
time.Sleep(5 * time.Second)
cs := atomic.LoadUint64(&conns)
ps := atomic.LoadUint64(&pkts)
delta := uint64(time.Now().Unix() - started)
fmt.Printf("conn: %v, pkt: %v, time: %v\n%v pkts/s\n", cs, ps, delta, ps/delta)
}
}
func main() {
go printStatistics()
ln, err := net.Listen("tcp", ":9090")
if err != nil {
log.Fatal(err)
}
for {
if conn, err := ln.Accept(); err == nil {
go handleConn(conn)
}
}
}
func handleConn(conn net.Conn) {
defer conn.Close()
atomic.AddUint64(&conns, 1)
buf := make([]byte, 512)
for {
if _, err := io.ReadFull(conn, buf); err != nil {
return
}
atomic.AddUint64(&pkts, 1)
if _, err := fmt.Fprintf(conn, "%X", sha256.Sum256(buf)); err != nil {
return
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment