yocto-sumo源码解析(十一): recvfds
生活随笔
收集整理的這篇文章主要介紹了
yocto-sumo源码解析(十一): recvfds
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
def recvfds(sock, size):'''Receive an array of fds over an AF_UNIX socket.'''a = array.array('i') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #聲明一個整型數組,itemsizebytes_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.htmlif not msg and not ancdata:raise EOFErrortry: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 andcmsg_type == socket.SCM_RIGHTS):if len(cmsg_data) % a.itemsize != 0:raise ValueErrora.frombytes(cmsg_data) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #從cmsg_data中提取fd到數組aassert len(a) % 256 == msg[0]return list(a)except (ValueError, IndexError):passraise RuntimeError('Invalid data received')
?
轉載于:https://www.cnblogs.com/shortnil/p/9978193.html
總結
以上是生活随笔為你收集整理的yocto-sumo源码解析(十一): recvfds的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot的yml自定义值的笔
- 下一篇: 圆桌的项目Alpha冲刺(团队)