in pkg/util/fdchannel.go [47:84]
func RecvMsg(via net.Conn) (int, []byte, error) {
klog.V(4).Info("get the underlying socket")
conn, ok := via.(*net.UnixConn)
if !ok {
return 0, nil, errors.New("failed to cast via to *net.UnixConn")
}
connf, err := conn.File()
if err != nil {
return 0, nil, err
}
socket := int(connf.Fd())
defer connf.Close()
klog.V(4).Info("calling recvmsg...")
buf := make([]byte, syscall.CmsgSpace(4))
b := make([]byte, 5000)
//nolint:dogsled
n, _, _, _, err := syscall.Recvmsg(socket, b, buf, 0)
if err != nil {
return 0, nil, err
}
klog.V(4).Infof("received message of %d bytes", n)
klog.V(4).Info("parsing SCM...")
var msgs []syscall.SocketControlMessage
msgs, err = syscall.ParseSocketControlMessage(buf)
if err != nil {
return 0, nil, err
}
klog.V(4).Info("parsing SCM_RIGHTS...")
fds, err := syscall.ParseUnixRights(&msgs[0])
if err != nil {
return 0, nil, err
}
return fds[0], b[:n], err
}