英文:
Unix domain socket name in go language
问题
在Go语言的net
包中,提供了以下函数:
func ResolveUnixAddr(net, addr string) (*UnixAddr, error)
其中,字符串参数net
表示网络名称,可以是"unix"、"unixgram"或"unixpacket"。
我猜测网络名称的含义如下:
- unixgram:在socket()函数中作为SOCK_DGRAM类型,由
net
包中的ListenPacket()函数使用。 - unixpacket:在socket()函数中作为SOCK_STREAM类型,由
net
包中的Listen()函数使用。 - unix:可能是其他类型。
我猜的对吗?
英文:
The net package in go provides this function:
func ResolveUnixAddr(net, addr string) (*UnixAddr, error)
The string parameter net
gives the network name, "unix", "unixgram" or "unixpacket".
I guess the the network name's meaning as:
-
unixgram: as type SOCK_DGRAM in socket() function, used by ListenPacket() in net package.
-
unixpacket: as type SOCK_STREAM in socket() function, used by Listen() in net package.
-
unix: either
Am I right?
答案1
得分: 9
在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
是指顺序数据包套接字(即数据以数据报套接字的方式发送,但按顺序传递)。
英文:
Looking at the unixSocket
function in net/unixsock_posix.go
, we have:
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)
}
So you're right about unixgram
being a datagram socket, but it is unix
that refers to the the stream type socket and unixpacket
refers to a sequential packet socket (i.e. data is sent in packets as with datagram sockets, but they are delivered in order).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论