Goでunix domain socketの通信を行いたい
ネットで色々と探しましたが、
なかなか情報が見つかりにくかったので、
個人的なメモを書いておきます
サンプル
2秒毎にクライアントからサーバにhi
ってメッセージを送るだけのものです
server
package main import ( "log" "net" "os" "path/filepath" ) 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() { file := filepath.Join(os.TempDir(), "unixdomaisocketsample") os.Remove(file) l, err := net.Listen("unix", file) if err != nil { log.Fatal("listen error:", err) } for { fd, err := l.Accept() if err != nil { log.Fatal("accept error:", err) } go echoServer(fd) } }
client
package main import ( "io" "log" "net" "os" "path/filepath" "time" ) func reader(r io.Reader) { buf := make([]byte, 1024) for { n, err := r.Read(buf[:]) if err != nil { return } println("Client got:", string(buf[0:n])) } } func main() { file := filepath.Join(os.TempDir(), "unixdomaisocketsample") c, err := net.Dial("unix", file) if err != nil { panic(err) } defer c.Close() go reader(c) for { _, err := c.Write([]byte("hi")) if err != nil { log.Fatal("write error:", err) break } time.Sleep(time.Second * 2) } }