go语言中的Unix域套接字名称

dia*_*neo 4 unix sockets go

go中的net包提供了这个功能:

func ResolveUnixAddr(net, addr string) (*UnixAddr, error)
Run Code Online (Sandbox Code Playgroud)

string参数net给出网络名称"unix","unixgram"或​​"unixpacket".

我猜网络名称的含义如下:

  • unixgram:作为socket()函数中的类型SOCK_DGRAM,由网络包中的ListenPacket()使用.

  • unixpacket:作为socket()函数中的SOCK_STREAM类型,由net包中的Listen()使用.

  • unix:要么

我对吗?

Jam*_*dge 7

看看unixSocket函数net/unixsock_posix.go,我们有:

var sotype int
switch net {
case "unix":
        sotype = syscall.SOCK_STREAM
case "unixgram":
        sotype = syscall.SOCK_DGRAM
case "unixpacket":
        sotype = syscall.SOCK_SEQPACKET
default:
        return nil, UnknownNetworkError(net)
}
Run Code Online (Sandbox Code Playgroud)

所以你是unixgram一个数据报套接字是正确的,但它是unix指流类型套接字并unixpacket引用顺序数据包套接字(即数据与数据报套接字一样在数据包中发送,但它们按顺序传递).