你正在使用的Go版本是什么(go version
)?
$ go version
PS C:\Users\garre> go version
go version go1.14.4 windows/amd64
(尽管我在illumos、Linux、darwin等系统上使用了许多不同版本的Go)
这个问题在最新版本中是否会重现?
是的。
你正在使用的操作系统和处理器架构是什么(go env
)?
go env
输出
$ go env
功能请求
由于这是一个功能请求,我没有包括典型的错误报告细节。
我想要的是我们能够更广泛地获取对等凭据。我最感兴趣的是illumos/solaris(它在libc中使用getpeerucred(),但我认为这对Darwin、FreeBSD和其他平台也很有用。
对于Linux,我们可以使用SO_PEERCRED的GetsockoptUcred。这是很好的。我希望有一种类似的方式可以在其他平台上实现这一点(可能是平台特定的),而不必依赖cgo(如果可能的话)。
5条答案
按热度按时间t1qtbnec1#
这最初是在#1101中请求的,然而这个问题被劫持来代替发送凭证和文件描述符,并且在2017年被认为已经解决了。
如果能有一个跨平台的API来实现这个功能就太好了。
mbyulnm02#
其他系统上可用的机制有哪些?
bxpogfeg3#
所以,Solaris和illumos有getpeerucred。我相信BSD系统有SO_LOCAL、LOCAL_PEERCRED和LOCAL_PEERPID。还有一个使用sockpeercred而不是ucred的SO_PEERCRED版本。
这是一个混乱的非可移植API。但如果能访问这些标签而不必依赖cgo,那将是很好的。
jmo0nnb34#
https://golang.org/cl/294989提到了这个问题:
unix: add Xucred, GetsockoptXucred on freebsd
2w3kk1z55#
顺便说一下,https://golang.org/cl/292330已经为Darwin添加了这个功能,感谢@bradfitz。我即将发送CLs,以便在BSD上添加支持,并可能在Illumos/Solaris上也添加支持。
一旦这些功能在
x/sys/unix
上实现,我希望我们也能将这些额外的平台支持添加到inet.af/peercred中,从而为对等凭据提供一个便携式API。