I've dived into the call stack of both os.OpenFile
and net.Listen
to see if I can make a UNIX domain socket using os.OpenFile
. Below is my attempt. But, after tracing both call stacks (os.OpenFile
's and net.Listen
's) I'm still confused. The below code doesn't read from the file, apparently, and stores the data to the filesystem.
os.OpenFile
? os.ModeSocket
if it's not to be used with os.OpenFile
to create a UNIX socket?package main
import (
"fmt"
"log"
"os"
)
func main() {
sock, err := os.OpenFile("f.sock", os.O_RDWR|os.O_CREATE, os.ModeSocket|os.ModePerm)
defer sock.Close()
if err != nil {
log.Panic(err)
}
n, err := sock.WriteString("hello\n")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
}
b := make([]byte, 10)
n, err = sock.Read(b)
fmt.Println(n)
if err != nil {
fmt.Println("error reading: ", err)
}
fmt.Println(b)
}
No. OpenFile
is a generalized api for opening file, use net.Listen("unixpacket", "f.sock")
or net.Dial("unixpacket", "f.sock")
if you wanna work with unix socket
os.ModeSocket
is just a *nix registered flag for socket fd, use when you want to filter fd types