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.
- How can I implement a UNIX domain socket using
os.OpenFile
? - What is the purpose of
os.ModeSocket
if it's not to be used withos.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
")
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)
}