Skip to content

Instantly share code, notes, and snippets.

@ks888
Created March 17, 2018 05:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ks888/606aaf88bbb8cdbd4c297f67c935a03d to your computer and use it in GitHub Desktop.
Save ks888/606aaf88bbb8cdbd4c297f67c935a03d to your computer and use it in GitHub Desktop.
TCP echo server/client to be used with strace
package main
import (
"log"
"net"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
log.Fatal(err)
}
_, err = conn.Write([]byte("test"))
if err != nil {
log.Fatal(err)
}
buff := make([]byte, 64)
_, err = conn.Read(buff)
if err != nil {
log.Fatal(err)
}
err = conn.Close()
if err != nil {
log.Fatal(err)
}
}
package main
import (
"fmt"
"io"
"log"
"net"
)
func main() {
fmt.Println("\n===== net.Listen() =====")
ln, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
for {
fmt.Println("\n===== ln.Accept() =====")
conn, err := ln.Accept()
if err != nil {
log.Print(err)
continue
}
// Not start go routine here for the readability of the strace output.
fmt.Println("\n===== io.Copy() =====")
_, err = io.Copy(conn, conn) // blocked until the client closes the conn.
if err != nil {
log.Print(err)
continue
}
fmt.Println("\n===== conn.Close() =====")
if err = conn.Close(); err != nil {
log.Print(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment