Skip to content

Instantly share code, notes, and snippets.

@hshimamoto
Created August 8, 2020 10:39
Show Gist options
  • Save hshimamoto/7241cf4cd51900bfd54b514841f893b3 to your computer and use it in GitHub Desktop.
Save hshimamoto/7241cf4cd51900bfd54b514841f893b3 to your computer and use it in GitHub Desktop.
golang buffer reuse test
// vim:set sw=4 sts=4:
package main
import (
"fmt"
"net"
"os"
"time"
"github.com/hshimamoto/go-session"
)
func recv() {
serv, err := session.NewServer(":9999", func(conn net.Conn) {
defer conn.Close()
buf := make([]byte, 10)
n := 0
for {
r, err := conn.Read(buf[n:])
if err != nil {
break
}
if r == 0 {
break
}
fmt.Println("recv")
fmt.Println(buf[n:n+r])
n += r
if n == len(buf) {
fmt.Println("reach limit")
break
}
}
fmt.Println("all")
fmt.Println(buf[0:n])
fmt.Println("done")
})
if err != nil {
fmt.Println(err)
os.Exit(1)
}
serv.Run()
}
func send() {
time.Sleep(100 * time.Millisecond)
conn, err := session.Dial("127.0.0.1:9999")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer conn.Close()
for i := 0; i < 20; i++ {
conn.Write([]byte{byte(i)})
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go recv()
send()
time.Sleep(100 * time.Millisecond)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment