加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

yocto-sumo源码解析(十一): recvfds

发布时间:2020-12-15 23:13:17 所属栏目:安全 来源:网络整理
导读:def recvfds(sock,size): ‘‘‘ Receive an array of fds over an AF_UNIX socket. ‘‘‘ a = array.array( ‘ i ‘ ) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #声明一个整型数组,itemsize bytes_size = a.itemsize * size ? ? ? ? ?
def recvfds(sock,size):
        ‘‘‘Receive an array of fds over an AF_UNIX socket.‘‘‘
        a = array.array(i) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #声明一个整型数组,itemsize
        bytes_size = a.itemsize * size ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #数组容量设置
        msg,ancdata,flags,addr = sock.recvmsg(1,socket.CMSG_LEN(bytes_size)) ? ? ? #从套接字中读取数据到msg,ancdata,recvmsg函数是标准posix函数,可以参阅:http://pubs.opengroup.org/onlinepubs/009695399/functions/recvmsg.html
        if not msg and not ancdata:
            raise EOFError
        try:
            if len(ancdata) != 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#对于接收到的附加数据,长度不为1个元组的情况下退出
                raise RuntimeError(received %d items of ancdata %
                                   len(ancdata))
            cmsg_level,cmsg_type,cmsg_data = ancdata[0] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#从附加数据中提取(cmsg_level,cmsg_data)元组
            if (cmsg_level == socket.SOL_SOCKET and
                cmsg_type == socket.SCM_RIGHTS):
                if len(cmsg_data) % a.itemsize != 0:
                    raise ValueError
                a.frombytes(cmsg_data) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #从cmsg_data中提取fd到数组a
                assert len(a) % 256 == msg[0]
                return list(a)
        except (ValueError,IndexError):
            pass
        raise RuntimeError(Invalid data received)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读