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

时间:2014-04-09 07:06:46

标签: sockets unix go

go中的 net 包提供了以下功能:

func ResolveUnixAddr(net, addr string) (*UnixAddr, error)

字符串参数net给出网络名称," unix"," unixgram"或" unixpacket"。

我猜网络名称的含义为:

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

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

  • unix

我是对的吗?

1 个答案:

答案 0 :(得分:6)

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

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)
}

所以你对unixgram作为数据报套接字是正确的,但它是unix引用流类型套接字而unixpacket引用顺序数据包套接字(即数据以数据包套接字的形式发送,但它们按顺序传送。