问题描述
我有一个在 Docker 容器中运行的 gRPC Go 客户端,通过 Unix 域套接字向 gRPC 服务器发送请求。在服务器上,我试图获取客户端的对等 PID,以便我可以在处理请求之前对其进行验证。但是,当它在 docker 容器中运行时,客户端的对等 PID 始终为 0。当客户端在容器外运行时,我能够看到对等 PID。 这是尝试获取对等 PID 的代码片段。
l,err := net.Listen("unix","/tmp/grpc.sock")
if err != nil {
fmt.Println("listen error",err.Error())
return
}
c,err := l.Accept()
if err == nil {
connType = c.RemoteAddr().Network()
var ucred *unix.Ucred
if connType == "unix" {
uc,ok := c.(*net.UnixConn)
if !ok {
fmt.Println("Unexpected conn type")
} else {
f,err := uc.File()
defer f.Close()
if err != nil {
fmt.Println("Error getting unix file %v",err)
}
ucred,err = unix.GetsockoptUcred(int(f.Fd()),unix.soL_SOCKET,unix.so_PEERCRED)
if err != nil {
fmt.Println("Error with sockopt %v",err)
} else {
fmt.Println("peer pid: %d",ucred.Pid)
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)