Skip to content

Instantly share code, notes, and snippets.

@Hiyorimi
Created April 22, 2019 14:34
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 Hiyorimi/c47c77a7c3dd7e95c7f93dc11b61415b to your computer and use it in GitHub Desktop.
Save Hiyorimi/c47c77a7c3dd7e95c7f93dc11b61415b to your computer and use it in GitHub Desktop.
Simple go echo server
package main
import (
"flag"
"log"
"net"
)
func echoServer(c net.Conn) {
for {
buf := make([]byte, 512)
nr, err := c.Read(buf)
if err != nil {
return
}
data := buf[0:nr]
println("Server got:", string(data))
_, err = c.Write(data)
if err != nil {
log.Fatal("Write: ", err)
}
}
}
func main() {
var l net.Listener
var err error
port := flag.String("port", "8080", "port to bind to")
socket := flag.Bool("socket", true, "Listen to socket or to unix socket. Default: socket.")
pathPtr := flag.String("path", "/tmp/echo.sock", "path to socket")
flag.Parse()
if *socket {
l, err = net.Listen("tcp", *port)
} else {
l, err = net.Listen("unix", *pathPtr)
}
if err != nil {
log.Fatal("listen error:", err)
}
for {
conn, err := l.Accept()
if err != nil {
log.Fatal("accept error:", err)
}
go echoServer(conn)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment