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‘) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |