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:要么
我对吗?
看看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引用顺序数据包套接字(即数据与数据报套接字一样在数据包中发送,但它们按顺序传递).