码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-18 16:39:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:unix   lag   err   附加   sg函数   bytes   源码解析   raise   pass   

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_type, 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)

 

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

标签:unix   lag   err   附加   sg函数   bytes   源码解析   raise   pass   

原文地址:https://www.cnblogs.com/shortnil/p/9978193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!