使用 os.OpenFile() 而不是 net.Listen()
Using os.OpenFile() instead of net.Listen()
我深入研究了 os.OpenFile
和 net.Listen
的调用堆栈,看看是否可以使用 os.OpenFile
创建 UNIX 域套接字。以下是我的尝试。但是,在跟踪两个调用堆栈(os.OpenFile
和 net.Listen
之后)我仍然感到困惑。显然,下面的代码没有从文件中读取数据,而是将数据存储到文件系统中。
- 如何使用
os.OpenFile
实现 UNIX 域套接字?
- 如果
os.ModeSocket
不与 os.OpenFile
一起使用来创建 UNIX 套接字,它的用途是什么?
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)
}
没有。 OpenFile
是用于打开文件的通用 api,如果您想使用 unix socket
,请使用 net.Listen("unixpacket", "f.sock")
或 net.Dial("unixpacket", "f.sock")
os.ModeSocket
只是socket fd的一个*nix注册标志,当你想过滤fd类型时使用
我深入研究了 os.OpenFile
和 net.Listen
的调用堆栈,看看是否可以使用 os.OpenFile
创建 UNIX 域套接字。以下是我的尝试。但是,在跟踪两个调用堆栈(os.OpenFile
和 net.Listen
之后)我仍然感到困惑。显然,下面的代码没有从文件中读取数据,而是将数据存储到文件系统中。
- 如何使用
os.OpenFile
实现 UNIX 域套接字? - 如果
os.ModeSocket
不与os.OpenFile
一起使用来创建 UNIX 套接字,它的用途是什么?
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)
}
没有。
OpenFile
是用于打开文件的通用 api,如果您想使用 unix socket ,请使用 os.ModeSocket
只是socket fd的一个*nix注册标志,当你想过滤fd类型时使用
net.Listen("unixpacket", "f.sock")
或 net.Dial("unixpacket", "f.sock")