当 STREAM unix 域套接字的侦听积压已满时,connect(2)
在大多数系统上使用 ECONNREFUSED 失败。它最好返回 EAGAIN。
原因在于,能够区分死套接字(文件系统中存在节点,但不再有进程监听)和完全积压的两种情况非常有用。我在移植一些 Linux 软件时遇到了这个问题,该软件有一些代码来清理死套接字,但如果代码可以通过向它们发送垃圾邮件来填充它们的积压工作而被欺骗来删除套接字,那么它就是一个安全漏洞。
只有 Linux 返回 EAGAIN;AIX、Solaris 和 Darwin 遵循 BSD 行为(仅在每个上进行了测试)。
POSIX 没有将 EAGAIN 列为 connect() ( link ) 的可能返回码,因此这里可能存在一些合规性问题。
让每个人都根据 Linux 进行更改的最佳途径是什么?我可以向 Oracle、Apple、FreeBSD PR 提交错误报告,然后在每个组织的邮件列表中解决它。还是我应该纠缠标准机构(奥斯汀集团)的某个人?即使优势很明显,尝试让每个人都在这里改变是否明智?