2014-04-09 136 views
3

包在旅途中提供了這種功能:Unix域套接字名

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

字符串參數net給人的網絡名稱, 「UNIX」, 「unixgram」 或 「unixpacket」。

我猜的網絡名稱的含義:

  • unixgram:在網包插座類型的SOCK_DGRAM()函數,通過ListenPacket使用()。

  • unixpacket:類型爲socket()函數中的SOCK_STREAM,由網絡包中的Listen()使用。

  • UNIX:要麼

我說得對不對?

回答

6

綜觀net/unixsock_posix.gounixSocket功能,我們有:

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指一個連續的數據包套接字(即數據包與數據報套接字一樣以數據包的形式發送,但它們按順序傳送)。

+0

我找到SOCK_SEQPACKET的[question](http://stackoverflow.com/questions/10104082/unix-socket-sock-seqpacket-vs-sock-dgram)。 – diabloneo

+0

想想像STREAM這樣的SEQPACKET,但套接字上的每個'recv'操作都將對應於另一端的'send'。也就是說,寫入邊界將在對方讀取時保持。 –