Skip to content

Instantly share code, notes, and snippets.

@heyLu
Created June 7, 2016 07:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save heyLu/3409a5a5494266161c9d2b49dc45efb3 to your computer and use it in GitHub Desktop.
Save heyLu/3409a5a5494266161c9d2b49dc45efb3 to your computer and use it in GitHub Desktop.
Unix sockets in Go
package main
import (
"fmt"
"net"
"os"
"os/signal"
"time"
)
func main() {
listener, err := net.Listen("unix", "/tmp/unixy.sock")
if err != nil {
panic(err)
}
defer os.Remove("/tmp/unixy.sock")
fmt.Println("listening on", listener.Addr())
quitCh := make(chan os.Signal, 0)
signal.Notify(quitCh, os.Interrupt)
go func() {
<-quitCh
os.Remove("/tmp/unixy.sock")
os.Exit(0)
}()
for {
conn, err := listener.Accept()
if err != nil {
panic(err)
}
fmt.Println("connected:", conn.RemoteAddr())
go func() {
for {
_, err = fmt.Fprintf(conn, "it's now %s\n", time.Now())
if err != nil {
fmt.Fprintln(os.Stderr, err)
err = conn.Close()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
return
}
time.Sleep(1 * time.Second)
}
}()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment