为什么linux 108上的unix-socket允许最大路径长度?

时间:2016-01-16 16:58:50

标签: c linux sockets unix-socket

创建unix套接字时,路径名(man 7 unix)最多允许108个字符长。对于朋友来说,这导致了他的节目中的一个错误,因为他的路径更长。现在我们想知道这个数字是如何确定的。

我怀疑这个数字是确定的,因此该结构sizeof的{​​{1}}与sockaddr_un等其他sockaddresses的尺寸相比是明确的。但如果他们想避免与其他sizeof值发生冲突,为什么不使用素数呢?有人可以为此提供一个授权来源吗?

2 个答案:

答案 0 :(得分:4)

这是为了匹配一个方便的内核数据结构中的可用空间。

编辑:

引用" 4.4BSD操作系统的设计和实施"由McKusick等人。人。 (第369页):

  

内存管理设施围绕数据结构   称为 mbuf 。 Mbufs或内存缓冲区长度为128个字节   这个空间的100或108个字节保留用于数据存储。

答案 1 :(得分:3)

如果你有时找不到它,那只意味着没有什么可以找到的。但它也意味着你找不到它。但是,我想分享我到目前为止所发现的内容和

我很难猜测这个数字是无数的。

我的猜测得到了GNU C Library的两个陈述的支持:

  

char sun_path[108]

     

这是要使用的文件名。不完整:为什么108是一个神奇的数字?   RMS建议将其设为零长度数组并调整示例   以下使用alloca分配适当的存储量   根据文件名的长度。

(RMS应该是Richard M. Stallman(另一个猜测))

  

日期类型:struct sockaddr
  ......

     

char sa_data[14]

     

这是实际的   套接字地址数据,与格式有关。它的长度也是   取决于格式,可能超过14.长度14   sa_data基本上是任意

PS:不知道为什么,但这类问题让我很好奇。